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
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue