Small improvement
Very small improvement in performance. Still, partialDer takes too long to compute. Trying to find ways to improve it.
This commit is contained in:
parent
ba272de4e3
commit
7b7a5c45ca
6 changed files with 788 additions and 837 deletions
|
|
@ -67,7 +67,7 @@ MODULE moduleMesh2DCyl
|
|||
PROCEDURE, PASS:: phy2log => phy2logQuad
|
||||
PROCEDURE, PASS:: neighbourElement => neighbourElementQuad
|
||||
!PARTICLUAR PROCEDURES
|
||||
PROCEDURE, PASS:: area => areaQuad
|
||||
PROCEDURE, PASS, PRIVATE:: area => areaQuad
|
||||
|
||||
END TYPE meshCell2DCylQuad
|
||||
|
||||
|
|
@ -99,7 +99,7 @@ MODULE moduleMesh2DCyl
|
|||
PROCEDURE, PASS:: phy2log => phy2logTria
|
||||
PROCEDURE, PASS:: neighbourElement => neighbourElementTria
|
||||
!PARTICULAR PROCEDURES
|
||||
PROCEDURE, PASS:: area => areaTria
|
||||
PROCEDURE, PASS, PRIVATE:: area => areaTria
|
||||
|
||||
END TYPE meshCell2DCylTria
|
||||
|
||||
|
|
@ -256,8 +256,13 @@ MODULE moduleMesh2DCyl
|
|||
TYPE(meshNodeCont), INTENT(in), TARGET:: nodes(:)
|
||||
REAL(8), DIMENSION(1:3):: r1, r2, r3, r4
|
||||
|
||||
!Assign node index
|
||||
self%n = n
|
||||
|
||||
!Assign number of nodes of cell
|
||||
self%nNodes = SIZE(p)
|
||||
|
||||
!Assign nodes to element
|
||||
self%n1 => nodes(p(1))%obj
|
||||
self%n2 => nodes(p(2))%obj
|
||||
self%n3 => nodes(p(3))%obj
|
||||
|
|
@ -428,7 +433,7 @@ MODULE moduleMesh2DCyl
|
|||
INTEGER, INTENT(in):: nNodes
|
||||
REAL(8):: localK(1:nNodes,1:nNodes)
|
||||
REAL(8):: Xi(1:3)
|
||||
REAL(8):: fPsi(1:4), dPsi(1:3, 1:4)
|
||||
REAL(8):: dPsi(1:3, 1:4)
|
||||
REAL(8):: pDer(1:3, 1:3)
|
||||
REAL(8):: r
|
||||
REAL(8):: invJ(1:3,1:3), detJ
|
||||
|
|
@ -445,8 +450,7 @@ MODULE moduleMesh2DCyl
|
|||
pDer = self%partialDer(4, dPsi)
|
||||
detJ = self%detJac(pDer)
|
||||
invJ = self%invJac(pDer)
|
||||
fPsi = self%fPsi(Xi, 4)
|
||||
r = DOT_PRODUCT(fPsi,self%r)
|
||||
r = self%gatherF(Xi, 4, self%r)
|
||||
localK = localK + MATMUL(TRANSPOSE(MATMUL(invJ,dPsi)), &
|
||||
MATMUL(invJ,dPsi))* &
|
||||
r*wQuad(l)*wQuad(m)/detJ
|
||||
|
|
@ -467,7 +471,8 @@ MODULE moduleMesh2DCyl
|
|||
REAL(8), INTENT(in):: source(1:nNodes)
|
||||
REAL(8):: localF(1:nNodes)
|
||||
REAL(8):: Xi(1:3)
|
||||
REAL(8):: fPsi(1:4), dPsi(1:3, 1:4)
|
||||
REAL(8):: fPsi(1:4)
|
||||
REAL(8):: dPsi(1:3, 1:4)
|
||||
REAL(8):: pDer(1:3, 1:3)
|
||||
REAL(8):: r
|
||||
REAL(8):: detJ, f
|
||||
|
|
@ -483,7 +488,7 @@ MODULE moduleMesh2DCyl
|
|||
pDer = self%partialDer(4, dPsi)
|
||||
detJ = self%detJac(pDer)
|
||||
fPsi = self%fPsi(Xi, 4)
|
||||
r = DOT_PRODUCT(fPsi,self%r)
|
||||
r = DOT_PRODUCT(fPsi, self%r)
|
||||
f = DOT_PRODUCT(fPsi,source)
|
||||
localF = localF + r*f*fPsi*wQuad(l)*wQuad(m)*detJ
|
||||
|
||||
|
|
@ -539,7 +544,7 @@ MODULE moduleMesh2DCyl
|
|||
|
||||
END FUNCTION phy2logQuad
|
||||
|
||||
!Gets the next element for a logical position Xi
|
||||
!Get the next element for a logical position Xi
|
||||
SUBROUTINE neighbourElementQuad(self, Xi, neighbourElement)
|
||||
IMPLICIT NONE
|
||||
|
||||
|
|
@ -572,7 +577,8 @@ MODULE moduleMesh2DCyl
|
|||
IMPLICIT NONE
|
||||
|
||||
CLASS(meshCell2DCylQuad), INTENT(inout):: self
|
||||
REAL(8):: r, Xi(1:3)
|
||||
REAL(8):: Xi(1:3)
|
||||
REAL(8):: r
|
||||
REAL(8):: detJ
|
||||
REAL(8):: fPsi(1:4)
|
||||
REAL(8):: dPsi(1:3, 1:4), pDer(1:3, 1:3)
|
||||
|
|
@ -583,24 +589,24 @@ MODULE moduleMesh2DCyl
|
|||
Xi = 0.D0
|
||||
dPsi = self%dPsi(Xi, 4)
|
||||
pDer = self%partialDer(4, dPsi)
|
||||
detJ = self%detJac(pDer)*PI8 !4*2*pi
|
||||
detJ = self%detJac(pDer)
|
||||
fPsi = self%fPsi(Xi, 4)
|
||||
!Computes total volume of the cell
|
||||
r = DOT_PRODUCT(fPsi,self%r)
|
||||
self%volume = r*detJ
|
||||
self%volume = r*detJ*PI8 !4*2*pi
|
||||
!Computes volume per node
|
||||
Xi = (/-5.D-1, -5.D-1, 0.D0/)
|
||||
r = self%gatherF(Xi, 4, self%r)
|
||||
self%arNodes(1) = fPsi(1)*r*detJ
|
||||
self%arNodes(1) = fPsi(1)*self%volume
|
||||
Xi = (/ 5.D-1, -5.D-1, 0.D0/)
|
||||
r = self%gatherF(Xi, 4, self%r)
|
||||
self%arNodes(2) = fPsi(2)*r*detJ
|
||||
self%arNodes(2) = fPsi(2)*self%volume
|
||||
Xi = (/ 5.D-1, 5.D-1, 0.D0/)
|
||||
r = self%gatherF(Xi, 4, self%r)
|
||||
self%arNodes(3) = fPsi(3)*r*detJ
|
||||
self%arNodes(3) = fPsi(3)*self%volume
|
||||
Xi = (/-5.D-1, 5.D-1, 0.D0/)
|
||||
r = self%gatherF(Xi, 4, self%r)
|
||||
self%arNodes(4) = fPsi(4)*r*detJ
|
||||
self%arNodes(4) = fPsi(4)*self%volume
|
||||
|
||||
END SUBROUTINE areaQuad
|
||||
|
||||
|
|
@ -619,7 +625,7 @@ MODULE moduleMesh2DCyl
|
|||
!Assign node index
|
||||
self%n = n
|
||||
|
||||
!Assign nomber of nodes to cell
|
||||
!Assign number of nodes of cell
|
||||
self%nNodes = SIZE(p)
|
||||
|
||||
!Assign nodes to element
|
||||
|
|
@ -736,7 +742,7 @@ MODULE moduleMesh2DCyl
|
|||
self%n2%emData%phi, &
|
||||
self%n3%emData%phi /)
|
||||
|
||||
array = -self%gatherDF(Xi, 4, phi)
|
||||
array = -self%gatherDF(Xi, 3, phi)
|
||||
|
||||
END FUNCTION gatherEFTria
|
||||
|
||||
|
|
@ -772,8 +778,8 @@ MODULE moduleMesh2DCyl
|
|||
INTEGER, INTENT(in):: nNodes
|
||||
REAL(8):: localK(1:nNodes,1:nNodes)
|
||||
REAL(8):: Xi(1:3)
|
||||
REAL(8):: dPsi(1:3,1:3)
|
||||
REAL(8):: r
|
||||
REAL(8):: fPsi(1:3), dPsi(1:3,1:3)
|
||||
REAL(8):: pDer(1:3, 1:3)
|
||||
REAL(8):: invJ(1:3,1:3), detJ
|
||||
INTEGER:: l
|
||||
|
|
@ -788,8 +794,7 @@ MODULE moduleMesh2DCyl
|
|||
pDer = self%partialDer(3, dPsi)
|
||||
detJ = self%detJac(pDer)
|
||||
invJ = self%invJac(pDer)
|
||||
fPsi = self%fPsi(Xi, 3)
|
||||
r = DOT_PRODUCT(fPsi,self%r)
|
||||
r = self%gatherF(Xi, 3, self%r)
|
||||
localK = localK + MATMUL(TRANSPOSE(MATMUL(invJ,dPsi)),MATMUL(invJ,dPsi))*r*wTria(l)/detJ
|
||||
|
||||
END DO
|
||||
|
|
@ -809,22 +814,23 @@ MODULE moduleMesh2DCyl
|
|||
REAL(8):: fPsi(1:3)
|
||||
REAL(8):: dPsi(1:3, 1:3), pDer(1:3, 1:3)
|
||||
REAL(8):: Xi(1:3)
|
||||
REAL(8):: r
|
||||
REAL(8):: detJ, f
|
||||
REAL(8):: r
|
||||
INTEGER:: l
|
||||
|
||||
localF = 0.D0
|
||||
Xi = 0.D0
|
||||
|
||||
Xi = 0.D0
|
||||
!Start 2D Gauss Quad Integral
|
||||
DO l=1, 4
|
||||
DO l = 1, 4
|
||||
Xi(1) = Xi1Tria(l)
|
||||
Xi(2) = Xi2Tria(l)
|
||||
dPsi = self%dPsi(Xi, 3)
|
||||
pDer = self%partialDer(3, dPsi)
|
||||
detJ = self%detJac(pDer)
|
||||
fPsi = self%fPsi(Xi, 3)
|
||||
r = DOT_PRODUCT(fPsi,self%r)
|
||||
f = DOT_PRODUCT(fPsi,source)
|
||||
r = DOT_PRODUCT(fPsi, self%r)
|
||||
f = DOT_PRODUCT(fPsi, source)
|
||||
localF = localF + r*f*fPsi*wTria(l)*detJ
|
||||
|
||||
END DO
|
||||
|
|
@ -897,10 +903,10 @@ MODULE moduleMesh2DCyl
|
|||
|
||||
CLASS(meshCell2DCylTria), INTENT(inout):: self
|
||||
REAL(8):: Xi(1:3)
|
||||
REAL(8):: r
|
||||
REAL(8):: dPsi(1:3, 1:3), pDer(1:3, 1:3)
|
||||
REAL(8):: detJ
|
||||
REAL(8):: fPsi(1:3)
|
||||
REAL(8):: r
|
||||
|
||||
self%volume = 0.D0
|
||||
self%arNodes = 0.D0
|
||||
|
|
@ -908,13 +914,13 @@ MODULE moduleMesh2DCyl
|
|||
Xi = (/ 1.D0/3.D0, 1.D0/3.D0, 0.D0 /)
|
||||
dPsi = self%dPsi(Xi, 3)
|
||||
pDer = self%partialDer(3, dPsi)
|
||||
detJ = self%detJac(pDer)*PI !2PI*1/2
|
||||
fPsi = self%fPsi(Xi, 4)
|
||||
detJ = self%detJac(pDer)
|
||||
fPsi = self%fPsi(Xi, 3)
|
||||
!Computes total volume of the cell
|
||||
r = DOT_PRODUCT(fPsi,self%r)
|
||||
self%volume = r*detJ
|
||||
r = DOT_PRODUCT(fPsi, self%r)
|
||||
self%volume = r*detJ*PI !2PI*1/2
|
||||
!Computes volume per node
|
||||
self%arNodes = fPsi*r*detJ
|
||||
self%arNodes = fPsi*self%volume
|
||||
|
||||
END SUBROUTINE areaTria
|
||||
|
||||
|
|
@ -939,9 +945,9 @@ MODULE moduleMesh2DCyl
|
|||
|
||||
invJ = 0.D0
|
||||
|
||||
invJ(1,1:2) = (/ pDer(2,2), -pDer(1,2) /)
|
||||
invJ(2,1:2) = (/ -pDer(2,1), pDer(1,1) /)
|
||||
invJ(3,3) = 1.D0
|
||||
invJ(1, 1:2) = (/ pDer(2,2), -pDer(1,2) /)
|
||||
invJ(2, 1:2) = (/ -pDer(2,1), pDer(1,1) /)
|
||||
invJ(3, 3) = 1.D0
|
||||
|
||||
END FUNCTION invJ2DCyl
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue