Skip to content

Commit a1df70b

Browse files
Updating QuadrangleInterpolationUtility
Fixing a bug in evaluating gradient of heirarchical shape functions
1 parent e6995fb commit a1df70b

File tree

1 file changed

+26
-24
lines changed

1 file changed

+26
-24
lines changed

src/submodules/Quadrangle/src/QuadrangleInterpolationUtility@HierarchicalMethods.F90

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@ PURE SUBROUTINE VertexBasisGradient_Quadrangle2_(L1, L2, dL1, dL2, &
117117
ans(1:dim1, 2, 2) = L1(1:dim1, 1) * dL2(1:dim1, 0)
118118
ans(1:dim1, 3, 2) = L1(1:dim1, 1) * dL2(1:dim1, 1)
119119
ans(1:dim1, 4, 2) = L1(1:dim1, 0) * dL2(1:dim1, 1)
120-
121120
END SUBROUTINE VertexBasisGradient_Quadrangle2_
122121

123122
!----------------------------------------------------------------------------
@@ -304,8 +303,8 @@ PURE SUBROUTINE LeftVerticalEdgeBasisGradient_Quadrangle_( &
304303
dim3 = 2
305304

306305
DO CONCURRENT(k2=2:order, ii=1:dim1)
307-
ans(ii, offset + k2 - 1, 1) = (mysign**(k2 - 1)) * dL1(ii, 0) * L2(ii, k2)
308-
ans(ii, offset + k2 - 1, 2) = (mysign**(k2 - 1)) * L1(ii, 0) * dL2(ii, k2)
306+
ans(ii, offset + k2 - 1, 1) = (mysign**k2) * dL1(ii, 0) * L2(ii, k2)
307+
ans(ii, offset + k2 - 1, 2) = (mysign**k2) * L1(ii, 0) * dL2(ii, k2)
309308
END DO
310309

311310
END SUBROUTINE LeftVerticalEdgeBasisGradient_Quadrangle_
@@ -348,8 +347,8 @@ PURE SUBROUTINE RightVerticalEdgeBasisGradient_Quadrangle_( &
348347

349348
! Right vertical
350349
DO CONCURRENT(k2=2:order, ii=1:dim1)
351-
ans(ii, offset + k2 - 1, 1) = (mysign**(k2 - 1)) * dL1(ii, 1) * L2(ii, k2)
352-
ans(ii, offset + k2 - 1, 2) = (mysign**(k2 - 1)) * L1(ii, 1) * dL2(ii, k2)
350+
ans(ii, offset + k2 - 1, 1) = (mysign**k2) * dL1(ii, 1) * L2(ii, k2)
351+
ans(ii, offset + k2 - 1, 2) = (mysign**k2) * L1(ii, 1) * dL2(ii, k2)
353352
END DO
354353
END SUBROUTINE RightVerticalEdgeBasisGradient_Quadrangle_
355354

@@ -497,8 +496,8 @@ PURE SUBROUTINE BottomHorizontalEdgeBasisGradient_Quadrangle_( &
497496

498497
!! bottom edge
499498
DO CONCURRENT(k1=2:order, ii=1:dim1)
500-
ans(ii, offset + k1 - 1, 1) = (mysign**(k1 - 1)) * dL1(ii, k1) * L2(ii, 0)
501-
ans(ii, offset + k1 - 1, 2) = (mysign**(k1 - 1)) * L1(ii, k1) * dL2(ii, 0)
499+
ans(ii, offset + k1 - 1, 1) = (mysign**k1) * dL1(ii, k1) * L2(ii, 0)
500+
ans(ii, offset + k1 - 1, 2) = (mysign**k1) * L1(ii, k1) * dL2(ii, 0)
502501
END DO
503502

504503
END SUBROUTINE BottomHorizontalEdgeBasisGradient_Quadrangle_
@@ -537,10 +536,9 @@ PURE SUBROUTINE TopHorizontalEdgeBasisGradient_Quadrangle_( &
537536

538537
!! top edge
539538
DO CONCURRENT(k1=2:order, ii=1:dim1)
540-
ans(ii, offset + k1 - 1, 1) = (mysign**(k1 - 1)) * dL1(ii, k1) * L2(ii, 1)
541-
ans(ii, offset + k1 - 1, 2) = (mysign**(k1 - 1)) * L1(ii, k1) * dL2(ii, 1)
539+
ans(ii, offset + k1 - 1, 1) = (mysign**k1) * dL1(ii, k1) * L2(ii, 1)
540+
ans(ii, offset + k1 - 1, 2) = (mysign**k1) * L1(ii, k1) * dL2(ii, 1)
542541
END DO
543-
544542
END SUBROUTINE TopHorizontalEdgeBasisGradient_Quadrangle_
545543

546544
!----------------------------------------------------------------------------
@@ -601,12 +599,11 @@ PURE SUBROUTINE CellBasis_Quadrangle2_(pb, qb, L1, L2, ans, nrow, ncol, &
601599
o1 = REAL(faceOrient(1), kind=DFP)
602600
o2 = REAL(faceOrient(2), kind=DFP)
603601

602+
p = pb
603+
q = qb
604604
IF (faceOrient(3) .LT. 0_I4B) THEN
605605
p = qb
606606
q = pb
607-
ELSE
608-
p = pb
609-
q = qb
610607
END IF
611608

612609
DO CONCURRENT(k1=2:p, k2=2:q, ii=1:nrow)
@@ -648,21 +645,20 @@ PURE SUBROUTINE CellBasisGradient_Quadrangle2_( &
648645

649646
o1 = REAL(faceOrient(1), kind=DFP)
650647
o2 = REAL(faceOrient(2), kind=DFP)
648+
p = pb
649+
q = qb
651650

652651
IF (faceOrient(3) .LT. 0_I4B) THEN
653652
p = qb
654653
q = pb
655-
ELSE
656-
p = pb
657-
q = qb
658654
END IF
659655

660656
DO CONCURRENT(k1=2:p, k2=2:q, ii=1:dim1)
661657
ans(ii, offset + (q - 1) * (k1 - 2) + k2 - 1, 1) = &
662-
(o1**(k1 - 1)) * (o2**k2) * dL1(ii, k1) * L2(ii, k2)
658+
(o1**k1) * (o2**k2) * dL1(ii, k1) * L2(ii, k2)
663659

664660
ans(ii, offset + (q - 1) * (k1 - 2) + k2 - 1, 2) = &
665-
(o1**k1) * (o2**(k2 - 1)) * L1(ii, k1) * dL2(ii, k2)
661+
(o1**k1) * (o2**k2) * L1(ii, k1) * dL2(ii, k2)
666662
END DO
667663

668664
END SUBROUTINE CellBasisGradient_Quadrangle2_
@@ -888,13 +884,15 @@ END SUBROUTINE CellBasisGradient_Quadrangle2_
888884

889885
CALL LobattoEvalAll_(n=maxP, x=xij(1, :), ans=L1, nrow=indx(1), ncol=indx(2))
890886
CALL LobattoEvalAll_(n=maxQ, x=xij(2, :), ans=L2, nrow=indx(1), ncol=indx(2))
887+
891888
CALL LobattoGradientEvalAll_(n=maxP, x=xij(1, :), ans=dL1, nrow=indx(1), &
892889
ncol=indx(2))
893890
CALL LobattoGradientEvalAll_(n=maxQ, x=xij(2, :), ans=dL2, nrow=indx(1), &
894891
ncol=indx(2))
895892

896-
CALL VertexBasisGradient_Quadrangle2_(L1=L1, L2=L2, dL1=dL1, dL2=dL2, &
897-
ans=ans, dim1=indx(1), dim2=indx(2), dim3=indx(3))
893+
CALL VertexBasisGradient_Quadrangle2_( &
894+
L1=L1, L2=L2, dL1=dL1, dL2=dL2, ans=ans, dim1=indx(1), dim2=indx(2), &
895+
dim3=indx(3))
898896

899897
dim2 = indx(2)
900898

@@ -908,7 +906,7 @@ END SUBROUTINE CellBasisGradient_Quadrangle2_
908906
END IF
909907

910908
! Right Vertical Edge basis function
911-
isok = (qe1 .GE. 2_I4B)
909+
isok = (qe2 .GE. 2_I4B)
912910
IF (isok) THEN
913911
CALL RightVerticalEdgeBasisGradient_Quadrangle_( &
914912
order=qe2, L1=L1, L2=L2, dL1=dL1, dL2=dL2, ans=ans, dim1=indx(1), &
@@ -926,11 +924,11 @@ END SUBROUTINE CellBasisGradient_Quadrangle2_
926924
END IF
927925

928926
! Left Vertical Edge basis function
929-
isok = (qe2 .GE. 2_I4B)
927+
isok = (qe1 .GE. 2_I4B)
930928
IF (isok) THEN
931929
CALL LeftVerticalEdgeBasisGradient_Quadrangle_( &
932-
order=qe2, L1=L1, L2=L2, dL1=dL1, dL2=dL2, ans=ans, dim1=indx(1), &
933-
dim2=indx(2), dim3=indx(3), orient=qe2Orient, offset=dim2)
930+
order=qe1, L1=L1, L2=L2, dL1=dL1, dL2=dL2, ans=ans, dim1=indx(1), &
931+
dim2=indx(2), dim3=indx(3), orient=qe1Orient, offset=dim2)
934932
dim2 = dim2 + indx(2)
935933
END IF
936934

@@ -948,4 +946,8 @@ END SUBROUTINE CellBasisGradient_Quadrangle2_
948946
DEALLOCATE (L1, L2, dL1, dL2)
949947
END PROCEDURE HeirarchicalBasisGradient_Quadrangle3_
950948

949+
!----------------------------------------------------------------------------
950+
!
951+
!----------------------------------------------------------------------------
952+
951953
END SUBMODULE HierarchicalMethods

0 commit comments

Comments
 (0)