Mark_1
First thing that I am kinda happy with. Still some things to improve but at least push is good.
This commit is contained in:
parent
15d64f3e68
commit
7f6afd6a87
11 changed files with 336 additions and 258 deletions
|
|
@ -41,11 +41,12 @@ MODULE moduleMesh1DRad
|
|||
END TYPE meshCell1DRad
|
||||
|
||||
ABSTRACT INTERFACE
|
||||
PURE SUBROUTINE partialDer_interface(self, dPsi, dx)
|
||||
PURE SUBROUTINE partialDer_interface(self, nNodes, dPsi, dx)
|
||||
IMPORT meshCell1DRad
|
||||
|
||||
CLASS(meshCell1DRad), INTENT(in):: self
|
||||
REAL(8), INTENT(in):: dPsi(1:3,1:self%nNodes)
|
||||
INTEGER, INTENT(in):: nNodes
|
||||
REAL(8), INTENT(in):: dPsi(1:3,1:nNodes)
|
||||
REAL(8), INTENT(out), DIMENSION(1):: dx
|
||||
|
||||
END SUBROUTINE partialDer_interface
|
||||
|
|
@ -130,6 +131,7 @@ MODULE moduleMesh1DRad
|
|||
INTEGER:: s
|
||||
|
||||
self%n = n
|
||||
self%nNodes = SIZE(p)
|
||||
self%n1 => mesh%nodes(p(1))%obj
|
||||
!Get element coordinates
|
||||
r1 = self%n1%getCoordinates()
|
||||
|
|
@ -154,13 +156,13 @@ MODULE moduleMesh1DRad
|
|||
END SUBROUTINE initEdge1DRad
|
||||
|
||||
!Get nodes from edge
|
||||
PURE FUNCTION getNodes1DRad(self) RESULT(n)
|
||||
PURE FUNCTION getNodes1DRad(self, nNodes) RESULT(n)
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshEdge1DRad), INTENT(in):: self
|
||||
INTEGER, ALLOCATABLE:: n(:)
|
||||
INTEGER, INTENT(in):: nNodes
|
||||
INTEGER:: n(1:nNodes)
|
||||
|
||||
ALLOCATE(n(1))
|
||||
n = (/ self%n1%n /)
|
||||
|
||||
END FUNCTION getNodes1DRad
|
||||
|
|
@ -253,17 +255,17 @@ MODULE moduleMesh1DRad
|
|||
!1 point Gauss integral
|
||||
Xi = 0.D0
|
||||
fPsi = self%fPsi(Xi, 2)
|
||||
detJ = self%detJac(Xi)
|
||||
detJ = self%detJac(Xi, 2)
|
||||
!Computes total volume of the cell
|
||||
r = DOT_PRODUCT(fPsi, self%r)
|
||||
l = 2.D0*detJ
|
||||
self%volume = r*l
|
||||
!Computes volume per node
|
||||
Xi = (/-5.D-1, 0.D0, 0.D0/)
|
||||
r = self%gatherF(Xi, self%r)
|
||||
r = self%gatherF(Xi, 2, self%r)
|
||||
self%arNodes(1) = fPsi(1)*r*l
|
||||
Xi = (/ 5.D-1, 0.D0, 0.D0/)
|
||||
r = self%gatherF(Xi, self%r)
|
||||
r = self%gatherF(Xi, 2, self%r)
|
||||
self%arNodes(2) = fPsi(2)*r*l
|
||||
|
||||
END SUBROUTINE areaRad
|
||||
|
|
@ -301,11 +303,12 @@ MODULE moduleMesh1DRad
|
|||
END FUNCTION dPsiRad
|
||||
|
||||
!Computes partial derivatives of coordinates
|
||||
PURE SUBROUTINE partialDerRad(self, dPsi, dx)
|
||||
PURE SUBROUTINE partialDerRad(self, nNodes, dPsi, dx)
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshCell1DRadSegm), INTENT(in):: self
|
||||
REAL(8), INTENT(in):: dPsi(1:3,1:self%nNodes)
|
||||
INTEGER, INTENT(in):: nNodes
|
||||
REAL(8), INTENT(in):: dPsi(1:3,1:nNodes)
|
||||
REAL(8), INTENT(out), DIMENSION(1):: dx
|
||||
|
||||
dx(1) = DOT_PRODUCT(dPsi(1,:), self%r)
|
||||
|
|
@ -313,12 +316,13 @@ MODULE moduleMesh1DRad
|
|||
END SUBROUTINE partialDerRad
|
||||
|
||||
!Computes local stiffness matrix
|
||||
PURE FUNCTION elemKRad(self) RESULT(localK)
|
||||
PURE FUNCTION elemKRad(self, nNodes) RESULT(localK)
|
||||
USE moduleConstParam, ONLY: PI2
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshCell1DRadSegm), INTENT(in):: self
|
||||
REAL(8):: localK(1:self%nNodes,1:self%nNodes)
|
||||
INTEGER, INTENT(in):: nNodes
|
||||
REAL(8):: localK(1:nNodes,1:nNodes)
|
||||
REAL(8):: Xi(1:3)
|
||||
REAL(8):: dPsi(1:3, 1:2)
|
||||
REAL(8):: invJ(1:3,1:3), detJ
|
||||
|
|
@ -330,8 +334,8 @@ MODULE moduleMesh1DRad
|
|||
DO l = 1, 3
|
||||
Xi(1) = corSeg(l)
|
||||
dPsi = self%dPsi(Xi, 2)
|
||||
detJ = self%detJac(Xi, dPsi)
|
||||
invJ = self%invJac(Xi, dPsi)
|
||||
detJ = self%detJac(Xi, 2, dPsi)
|
||||
invJ = self%invJac(Xi, 2, dPsi)
|
||||
fPsi = self%fPsi(Xi, 2)
|
||||
r = DOT_PRODUCT(fPsi, self%r)
|
||||
localK = localK + MATMUL(RESHAPE(MATMUL(invJ,dPsi), (/ 2, 1/)), &
|
||||
|
|
@ -344,13 +348,14 @@ MODULE moduleMesh1DRad
|
|||
|
||||
END FUNCTION elemKRad
|
||||
|
||||
PURE FUNCTION elemFRad(self, source) RESULT(localF)
|
||||
PURE FUNCTION elemFRad(self, nNodes, source) RESULT(localF)
|
||||
USE moduleConstParam, ONLY: PI2
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshCell1DRadSegm), INTENT(in):: self
|
||||
REAL(8), INTENT(in):: source(1:self%nNodes)
|
||||
REAL(8):: localF(1:self%nNodes)
|
||||
INTEGER, INTENT(in):: nNodes
|
||||
REAL(8), INTENT(in):: source(1:nNodes)
|
||||
REAL(8):: localF(1:nNodes)
|
||||
REAL(8):: fPsi(1:2)
|
||||
REAL(8):: detJ, f, r
|
||||
REAL(8):: Xi(1:3)
|
||||
|
|
@ -361,7 +366,7 @@ MODULE moduleMesh1DRad
|
|||
|
||||
DO l = 1, 3
|
||||
Xi(1) = corSeg(l)
|
||||
detJ = self%detJac(Xi)
|
||||
detJ = self%detJac(Xi, 2)
|
||||
fPsi = self%fPsi(Xi, 2)
|
||||
r = DOT_PRODUCT(fPsi, self%r)
|
||||
f = DOT_PRODUCT(fPsi, source)
|
||||
|
|
@ -381,7 +386,7 @@ MODULE moduleMesh1DRad
|
|||
phi = (/ self%n1%emData%phi, &
|
||||
self%n2%emData%phi /)
|
||||
|
||||
array = -self%gatherDF(Xi, phi)
|
||||
array = -self%gatherDF(Xi, 2, phi)
|
||||
|
||||
END FUNCTION gatherEFRad
|
||||
|
||||
|
|
@ -401,7 +406,7 @@ MODULE moduleMesh1DRad
|
|||
B(:,3) = (/ self%n1%emData%B(3), &
|
||||
self%n2%emData%B(3) /)
|
||||
|
||||
array = self%gatherF(Xi, 3, B)
|
||||
array = self%gatherF(Xi, 2, B)
|
||||
|
||||
END FUNCTION gatherMFRad
|
||||
|
||||
|
|
@ -417,11 +422,12 @@ MODULE moduleMesh1DRad
|
|||
END FUNCTION insideRad
|
||||
|
||||
!Get nodes from 1D volume
|
||||
PURE FUNCTION getNodesRad(self) RESULT(n)
|
||||
PURE FUNCTION getNodesRad(self, nNodes) RESULT(n)
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshCell1DRadSegm), INTENT(in):: self
|
||||
INTEGER:: n(1:self%nNodes)
|
||||
INTEGER, INTENT(in):: nNodes
|
||||
INTEGER:: n(1:nNodes)
|
||||
|
||||
n = (/ self%n1%n, self%n2%n /)
|
||||
|
||||
|
|
@ -460,13 +466,14 @@ MODULE moduleMesh1DRad
|
|||
|
||||
!COMMON FUNCTIONS FOR 1D VOLUME ELEMENTS
|
||||
!Computes the element Jacobian determinant
|
||||
PURE FUNCTION detJ1DRad(self, Xi, dPsi_in) RESULT(dJ)
|
||||
PURE FUNCTION detJ1DRad(self, Xi, nNodes, dPsi_in) RESULT(dJ)
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshCell1DRad), INTENT(in):: self
|
||||
REAL(8), INTENT(in):: Xi(1:3)
|
||||
REAL(8), INTENT(in), OPTIONAL:: dPsi_in(1:3,1:self%nNodes)
|
||||
REAL(8):: dPsi(1:3,1:self%nNodes)
|
||||
INTEGER, INTENT(in):: nNodes
|
||||
REAL(8), INTENT(in), OPTIONAL:: dPsi_in(1:3,1:nNodes)
|
||||
REAL(8):: dPsi(1:3,1:nNodes)
|
||||
REAL(8):: dJ
|
||||
REAL(8):: dx(1)
|
||||
|
||||
|
|
@ -478,19 +485,20 @@ MODULE moduleMesh1DRad
|
|||
|
||||
END IF
|
||||
|
||||
CALL self%partialDer(dPsi, dx)
|
||||
CALL self%partialDer(nNodes, dPsi, dx)
|
||||
dJ = dx(1)
|
||||
|
||||
END FUNCTION detJ1DRad
|
||||
|
||||
!Computes the invers Jacobian
|
||||
PURE FUNCTION invJ1DRad(self, Xi, dPsi_in) RESULT(invJ)
|
||||
PURE FUNCTION invJ1DRad(self, Xi, nNodes, dPsi_in) RESULT(invJ)
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshCell1DRad), INTENT(in):: self
|
||||
REAL(8), INTENT(in):: Xi(1:3)
|
||||
REAL(8), INTENT(in), OPTIONAL:: dPsi_in(1:3,1:self%nNodes)
|
||||
REAL(8):: dPsi(1:3,1:self%nNodes)
|
||||
INTEGER, INTENT(in):: nNodes
|
||||
REAL(8), INTENT(in), OPTIONAL:: dPsi_in(1:3,1:nNodes)
|
||||
REAL(8):: dPsi(1:3,1:nNodes)
|
||||
REAL(8):: dx(1)
|
||||
REAL(8):: invJ(1:3,1:3)
|
||||
|
||||
|
|
@ -504,7 +512,7 @@ MODULE moduleMesh1DRad
|
|||
|
||||
invJ = 0.D0
|
||||
|
||||
CALL self%partialDer(dPsi, dx)
|
||||
CALL self%partialDer(nNodes, dPsi, dx)
|
||||
|
||||
invJ(1,1) = 1.D0/dx(1)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue