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:
Jorge Gonzalez 2023-01-05 21:22:13 +01:00
commit 15d64f3e68
8 changed files with 159 additions and 143 deletions

View file

@ -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