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

@ -230,7 +230,7 @@ MODULE moduleMesh1DCart
Xi(1) = random(-1.D0, 1.D0)
Xi(2:3) = 0.D0
fPsi = self%fPsi(Xi)
fPsi = self%fPsi(Xi, 2)
r(1) = DOT_PRODUCT(fPsi, self%x)
END FUNCTION randPos1DCartSegm
@ -249,7 +249,7 @@ MODULE moduleMesh1DCart
self%arNodes = 0.D0
!1 point Gauss integral
Xi = 0.D0
fPsi = self%fPsi(Xi)
fPsi = self%fPsi(Xi, 2)
detJ = self%detJac(Xi)
l = 2.D0*detJ
self%volume = l
@ -258,27 +258,29 @@ MODULE moduleMesh1DCart
END SUBROUTINE areaSegm
!Computes element functions at point Xi
PURE FUNCTION fPsiSegm(self, xi) RESULT(fPsi)
PURE FUNCTION fPsiSegm(self, Xi, nNodes) RESULT(fPsi)
IMPLICIT NONE
CLASS(meshCell1DCartSegm), INTENT(in):: self
REAL(8), INTENT(in):: xi(1:3)
REAL(8):: fPsi(1:self%nNodes)
REAL(8), INTENT(in):: Xi(1:3)
INTEGER, INTENT(in):: nNodes
REAL(8):: fPsi(1:nNodes)
fPsi(1) = 1.D0 - xi(1)
fPsi(2) = 1.D0 + xi(1)
fPsi(1) = 1.D0 - Xi(1)
fPsi(2) = 1.D0 + Xi(1)
fPsi = fPsi * 5.D-1
END FUNCTION fPsiSegm
!Computes element derivative shape function at Xi
PURE FUNCTION dPsiSegm(self, xi) RESULT(dPsi)
PURE FUNCTION dPsiSegm(self, Xi, nNodes) RESULT(dPsi)
IMPLICIT NONE
CLASS(meshCell1DCartSegm), INTENT(in):: self
REAL(8), INTENT(in):: xi(1:3)
REAL(8):: dPsi(1:3,1:self%nNodes)
REAL(8), INTENT(in):: Xi(1:3)
INTEGER, INTENT(in):: nNodes
REAL(8):: dPsi(1:3,1:nNodes)
dPsi = 0.D0
@ -314,7 +316,7 @@ MODULE moduleMesh1DCart
Xi = 0.D0
DO l = 1, 3
Xi(1) = corSeg(l)
dPsi = self%dPsi(Xi)
dPsi = self%dPsi(Xi, 2)
detJ = self%detJac(Xi, dPsi)
invJ = self%invJac(Xi, dPsi)
localK = localK + MATMUL(RESHAPE(MATMUL(invJ,dPsi), (/ 2, 1/)), &
@ -342,7 +344,7 @@ MODULE moduleMesh1DCart
DO l = 1, 3
Xi(1) = corSeg(l)
detJ = self%detJac(Xi)
fPsi = self%fPsi(Xi)
fPsi = self%fPsi(Xi, 2)
f = DOT_PRODUCT(fPsi, source)
localF = localF + f*fPsi*wSeg(l)*detJ
@ -384,14 +386,14 @@ MODULE moduleMesh1DCart
END FUNCTION gatherMFSegm
PURE FUNCTION insideSegm(xi) RESULT(ins)
PURE FUNCTION insideSegm(Xi) RESULT(ins)
IMPLICIT NONE
REAL(8), INTENT(in):: xi(1:3)
REAL(8), INTENT(in):: Xi(1:3)
LOGICAL:: ins
ins = xi(1) >=-1.D0 .AND. &
xi(1) <= 1.D0
ins = Xi(1) >=-1.D0 .AND. &
Xi(1) <= 1.D0
END FUNCTION insideSegm
@ -418,19 +420,19 @@ MODULE moduleMesh1DCart
END FUNCTION phy2logSegm
!Get next element for a logical position xi
SUBROUTINE nextElementSegm(self, xi, nextElement)
!Get next element for a logical position Xi
SUBROUTINE nextElementSegm(self, Xi, nextElement)
IMPLICIT NONE
CLASS(meshCell1DCartSegm), INTENT(in):: self
REAL(8), INTENT(in):: xi(1:3)
REAL(8), INTENT(in):: Xi(1:3)
CLASS(meshElement), POINTER, INTENT(out):: nextElement
NULLIFY(nextElement)
IF (xi(1) < -1.D0) THEN
IF (Xi(1) < -1.D0) THEN
nextElement => self%e2
ELSEIF (xi(1) > 1.D0) THEN
ELSEIF (Xi(1) > 1.D0) THEN
nextElement => self%e1
END IF
@ -440,11 +442,11 @@ MODULE moduleMesh1DCart
!COMMON FUNCTIONS FOR 1D VOLUME ELEMENTS
!Calculates a random position in 1D volume
!Computes the element Jacobian determinant
PURE FUNCTION detJ1DCart(self, xi, dPsi_in) RESULT(dJ)
PURE FUNCTION detJ1DCart(self, Xi, dPsi_in) RESULT(dJ)
IMPLICIT NONE
CLASS(meshCell1DCart), INTENT(in):: self
REAL(8), INTENT(in):: xi(1:3)
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)
REAL(8):: dJ
@ -454,7 +456,7 @@ MODULE moduleMesh1DCart
dPsi = dPsi_in
ELSE
dPsi = self%dPsi(xi)
dPsi = self%dPsi(Xi, 2)
END IF
@ -464,11 +466,11 @@ MODULE moduleMesh1DCart
END FUNCTION detJ1DCart
!Computes the invers Jacobian
PURE FUNCTION invJ1DCart(self, xi, dPsi_in) RESULT(invJ)
PURE FUNCTION invJ1DCart(self, Xi, dPsi_in) RESULT(invJ)
IMPLICIT NONE
CLASS(meshCell1DCart), INTENT(in):: self
REAL(8), INTENT(in):: xi(1:3)
REAL(8), INTENT(in):: Xi(1:3)
REAL(8), INTENT(in), OPTIONAL:: dPsi_in(1:3,1:self%nNodes)
REAL(8):: invJ(1:3,1:3)
REAL(8):: dPsi(1:3,1:self%nNodes)
@ -478,7 +480,7 @@ MODULE moduleMesh1DCart
dPsi = dPsi_in
ELSE
dPsi = self%dPsi(xi)
dPsi = self%dPsi(Xi, 2)
END IF