Passing nNodes as argument
It seems that this improves results as passing the size of the arrays as an argument is better than getting it from self.
This commit is contained in:
parent
6f24b5f1f6
commit
15d64f3e68
8 changed files with 159 additions and 143 deletions
|
|
@ -270,7 +270,7 @@ MODULE moduleMesh3DCart
|
|||
|
||||
!Assign proportional volume to each node
|
||||
Xi = (/0.25D0, 0.25D0, 0.25D0/)
|
||||
fPsi = self%fPsi(Xi)
|
||||
fPsi = self%fPsi(Xi, 4)
|
||||
volNodes = fPsi*self%volume
|
||||
self%n1%v = self%n1%v + volNodes(1)
|
||||
self%n2%v = self%n2%v + volNodes(2)
|
||||
|
|
@ -298,7 +298,7 @@ MODULE moduleMesh3DCart
|
|||
Xi(2) = random( 0.D0, 1.D0 - Xi(1))
|
||||
Xi(3) = random( 0.D0, 1.D0 - Xi(1) - Xi(2))
|
||||
|
||||
fPsi = self%fPsi(Xi)
|
||||
fPsi = self%fPsi(Xi, 4)
|
||||
|
||||
r = (/ DOT_PRODUCT(fPsi, self%x), &
|
||||
DOT_PRODUCT(fPsi, self%y), &
|
||||
|
|
@ -320,12 +320,13 @@ MODULE moduleMesh3DCart
|
|||
END SUBROUTINE volumeTetra
|
||||
|
||||
!Computes element functions in point Xi
|
||||
PURE FUNCTION fPsiTetra(self, Xi) RESULT(fPsi)
|
||||
PURE FUNCTION fPsiTetra(self, Xi, nNodes) RESULT(fPsi)
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshCell3DCartTetra), INTENT(in):: self
|
||||
REAL(8), INTENT(in):: Xi(1:3)
|
||||
REAL(8):: fPsi(1:self%nNodes)
|
||||
INTEGER, INTENT(in):: nNodes
|
||||
REAL(8):: fPsi(1:nNodes)
|
||||
|
||||
fPsi(1) = 1.D0 - Xi(1) - Xi(2) - Xi(3)
|
||||
fPsi(2) = Xi(1)
|
||||
|
|
@ -335,12 +336,13 @@ MODULE moduleMesh3DCart
|
|||
END FUNCTION fPsiTetra
|
||||
|
||||
!Derivative element function at coordinates Xi
|
||||
PURE FUNCTION dPsiTetra(self, Xi) RESULT(dPsi)
|
||||
PURE FUNCTION dPsiTetra(self, Xi, nNodes) RESULT(dPsi)
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshCell3DCartTetra), INTENT(in):: self
|
||||
REAL(8), INTENT(in):: Xi(1:3)
|
||||
REAL(8):: dPsi(1:3, 1:self%nNodes)
|
||||
INTEGER, INTENT(in):: nNodes
|
||||
REAL(8):: dPsi(1:3, 1:nNodes)
|
||||
|
||||
dPsi = 0.D0
|
||||
|
||||
|
|
@ -424,10 +426,10 @@ MODULE moduleMesh3DCart
|
|||
Xi = 0.D0
|
||||
!TODO: One point Gauss integral. Upgrade when possible
|
||||
Xi = (/ 0.25D0, 0.25D0, 0.25D0 /)
|
||||
dPsi = self%dPsi(Xi)
|
||||
dPsi = self%dPsi(Xi, 4)
|
||||
detJ = self%detJac(Xi, dPsi)
|
||||
invJ = self%invJac(Xi, dPsi)
|
||||
fPsi = self%fPsi(Xi)
|
||||
fPsi = self%fPsi(Xi, 4)
|
||||
localK = MATMUL(TRANSPOSE(MATMUL(invJ,dPsi)),MATMUL(invJ,dPsi))*1.D0/detJ
|
||||
|
||||
END FUNCTION elemKTetra
|
||||
|
|
@ -445,9 +447,9 @@ MODULE moduleMesh3DCart
|
|||
localF = 0.D0
|
||||
Xi = 0.D0
|
||||
Xi = (/ 0.25D0, 0.25D0, 0.25D0 /)
|
||||
dPsi = self%dPsi(Xi)
|
||||
dPsi = self%dPsi(Xi, 4)
|
||||
detJ = self%detJac(Xi, dPsi)
|
||||
fPsi = self%fPsi(Xi)
|
||||
fPsi = self%fPsi(Xi, 4)
|
||||
f = DOT_PRODUCT(fPsi, source)
|
||||
localF = f*fPsi*1.D0*detJ
|
||||
|
||||
|
|
@ -530,7 +532,7 @@ MODULE moduleMesh3DCart
|
|||
|
||||
Xi = 0.D0
|
||||
deltaR = (/r(1) - self%x(1), r(2) - self%y(1), r(3) - self%z(1) /)
|
||||
dPsi = self%dPsi(Xi)
|
||||
dPsi = self%dPsi(Xi, 4)
|
||||
invJ = self%invJac(Xi, dPsi)
|
||||
detJ = self%detJac(Xi, dPsi)
|
||||
Xi = MATMUL(invJ, deltaR)/detJ
|
||||
|
|
@ -579,7 +581,7 @@ MODULE moduleMesh3DCart
|
|||
dPsi = dPsi_in
|
||||
|
||||
ELSE
|
||||
dPsi = self%dPsi(Xi)
|
||||
dPsi = self%dPsi(Xi, 4)
|
||||
|
||||
END IF
|
||||
|
||||
|
|
@ -604,7 +606,7 @@ MODULE moduleMesh3DCart
|
|||
dPsi=dPsi_in
|
||||
|
||||
ELSE
|
||||
dPsi = self%dPsi(Xi)
|
||||
dPsi = self%dPsi(Xi, 4)
|
||||
|
||||
END IF
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue