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
|
|
@ -232,7 +232,7 @@ MODULE moduleMesh1DRad
|
|||
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%r)
|
||||
|
||||
END FUNCTION randPos1DRadSeg
|
||||
|
|
@ -252,7 +252,7 @@ MODULE moduleMesh1DRad
|
|||
self%arNodes = 0.D0
|
||||
!1 point Gauss integral
|
||||
Xi = 0.D0
|
||||
fPsi = self%fPsi(Xi)
|
||||
fPsi = self%fPsi(Xi, 2)
|
||||
detJ = self%detJac(Xi)
|
||||
!Computes total volume of the cell
|
||||
r = DOT_PRODUCT(fPsi, self%r)
|
||||
|
|
@ -260,38 +260,38 @@ MODULE moduleMesh1DRad
|
|||
self%volume = r*l
|
||||
!Computes volume per node
|
||||
Xi = (/-5.D-1, 0.D0, 0.D0/)
|
||||
fPsi_node = self%fPsi(Xi)
|
||||
r = DOT_PRODUCT(fPsi_node,self%r)
|
||||
r = self%gatherF(Xi, self%r)
|
||||
self%arNodes(1) = fPsi(1)*r*l
|
||||
Xi = (/ 5.D-1, 0.D0, 0.D0/)
|
||||
fPsi_node = self%fPsi(Xi)
|
||||
r = DOT_PRODUCT(fPsi_node,self%r)
|
||||
r = self%gatherF(Xi, self%r)
|
||||
self%arNodes(2) = fPsi(2)*r*l
|
||||
|
||||
END SUBROUTINE areaRad
|
||||
|
||||
!Computes element functions at point Xi
|
||||
PURE FUNCTION fPsiRad(self, xi) RESULT(fPsi)
|
||||
PURE FUNCTION fPsiRad(self, Xi, nNodes) RESULT(fPsi)
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshCell1DRadSegm), 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 fPsiRad
|
||||
|
||||
!Computes element derivative shape function at Xi
|
||||
PURE FUNCTION dPsiRad(self, xi) RESULT(dPsi)
|
||||
PURE FUNCTION dPsiRad(self, Xi, nNodes) RESULT(dPsi)
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshCell1DRadSegm), 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
|
||||
|
||||
|
|
@ -328,15 +328,15 @@ MODULE moduleMesh1DRad
|
|||
localK = 0.D0
|
||||
Xi = 0.D0
|
||||
DO l = 1, 3
|
||||
Xi(1) = corSeg(l)
|
||||
dPsi = self%dPsi(Xi)
|
||||
detJ = self%detJac(Xi, dPsi)
|
||||
invJ = self%invJac(Xi, dPsi)
|
||||
fPsi = self%fPsi(Xi)
|
||||
r = DOT_PRODUCT(fPsi, self%r)
|
||||
localK = localK + MATMUL(RESHAPE(MATMUL(invJ,dPsi), (/ 2, 1/)), &
|
||||
RESHAPE(MATMUL(invJ,dPsi), (/ 1, 2/)))* &
|
||||
r*wSeg(l)/detJ
|
||||
Xi(1) = corSeg(l)
|
||||
dPsi = self%dPsi(Xi, 2)
|
||||
detJ = self%detJac(Xi, dPsi)
|
||||
invJ = self%invJac(Xi, dPsi)
|
||||
fPsi = self%fPsi(Xi, 2)
|
||||
r = DOT_PRODUCT(fPsi, self%r)
|
||||
localK = localK + MATMUL(RESHAPE(MATMUL(invJ,dPsi), (/ 2, 1/)), &
|
||||
RESHAPE(MATMUL(invJ,dPsi), (/ 1, 2/)))* &
|
||||
r*wSeg(l)/detJ
|
||||
|
||||
END DO
|
||||
|
||||
|
|
@ -362,7 +362,7 @@ MODULE moduleMesh1DRad
|
|||
DO l = 1, 3
|
||||
Xi(1) = corSeg(l)
|
||||
detJ = self%detJac(Xi)
|
||||
fPsi = self%fPsi(Xi)
|
||||
fPsi = self%fPsi(Xi, 2)
|
||||
r = DOT_PRODUCT(fPsi, self%r)
|
||||
f = DOT_PRODUCT(fPsi, source)
|
||||
localF = localF + f*fPsi*r*wSeg(l)*detJ
|
||||
|
|
@ -405,14 +405,14 @@ MODULE moduleMesh1DRad
|
|||
|
||||
END FUNCTION gatherMFRad
|
||||
|
||||
PURE FUNCTION insideRad(xi) RESULT(ins)
|
||||
PURE FUNCTION insideRad(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 insideRad
|
||||
|
||||
|
|
@ -439,19 +439,19 @@ MODULE moduleMesh1DRad
|
|||
|
||||
END FUNCTION phy2logRad
|
||||
|
||||
!Get next element for a logical position xi
|
||||
SUBROUTINE nextElementRad(self, xi, nextElement)
|
||||
!Get next element for a logical position Xi
|
||||
SUBROUTINE nextElementRad(self, Xi, nextElement)
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshCell1DRadSegm), 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
|
||||
|
|
@ -460,11 +460,11 @@ 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, dPsi_in) RESULT(dJ)
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshCell1DRad), 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
|
||||
|
|
@ -474,7 +474,7 @@ MODULE moduleMesh1DRad
|
|||
dPsi = dPsi_in
|
||||
|
||||
ELSE
|
||||
dPsi = self%dPsi(xi)
|
||||
dPsi = self%dPsi(Xi, 2)
|
||||
|
||||
END IF
|
||||
|
||||
|
|
@ -484,11 +484,11 @@ MODULE moduleMesh1DRad
|
|||
END FUNCTION detJ1DRad
|
||||
|
||||
!Computes the invers Jacobian
|
||||
PURE FUNCTION invJ1DRad(self, xi, dPsi_in) RESULT(invJ)
|
||||
PURE FUNCTION invJ1DRad(self, Xi, dPsi_in) RESULT(invJ)
|
||||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshCell1DRad), 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):: dx(1)
|
||||
|
|
@ -498,7 +498,7 @@ MODULE moduleMesh1DRad
|
|||
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