@@ -1179,7 +1179,7 @@ SUBROUTINE TemporalTriangleMortarAssembly(ElementT, NodesT, Element, Nodes, Elem
11791179 TYPE (Element_t), POINTER :: ElementP, ElementLin
11801180 TYPE (GaussIntegrationPoints_t) :: IPT
11811181 REAL (KIND= dp) :: area, xt, yt, zt = 0.0_dp , u, v, w, um, vm, wm, uq, vq, &
1182- detJ, val, val_dual, weight, Lvals(20 )
1182+ detJ, val, val_dual, weight, Lvals(20 ), LVals2( 20 )
11831183 REAL (KIND= dp), ALLOCATABLE :: BasisT(:),Basis(:), BasisM(:), MASS(:,:), CoeffBasis(:)
11841184 INTEGER :: i,j,k,jj,n,m,ne,nM,neM,nd,ndM,ElemCode,LinCode,ElemCodeM,LinCodeM,nip,nrow,AllocStat
11851185 INTEGER , POINTER :: Indexes(:),IndexesM(:)
@@ -1324,46 +1324,38 @@ SUBROUTINE TemporalTriangleMortarAssembly(ElementT, NodesT, Element, Nodes, Elem
13241324 k = 0
13251325 DO i= 1 ,nd
13261326 IF ( ABS ( val * Basis(i) ) < 1.0d-10 ) CYCLE
1327-
1327+ ! Nslave = Nslave + 1
13281328 k = k+1
13291329 Linds(k) = InvPerm(Indexes(i))
1330- Lvals(k) = Basis(i)* val
1331-
1332- ! Nslave = Nslave + 1
1333- ! CALL List_AddToMatrixElement(Projector % ListMatrix, nrow, &
1334- ! InvPerm(Indexes(i)), Basis(i) * val )
1335-
1336- IF (BiOrthogonal) THEN
1337- CALL List_AddToMatrixElement(Projector % Child % ListMatrix, nrow, &
1338- InvPerm(Indexes(i)), Basis(i) * val_dual )
1339- END IF
1330+ Lvals(k) = Basis(i) * val
1331+ LVals2(k) = Basis(i) * val_dual
13401332 END DO
1341- CALL List_AddMatrixRow(Projector % ListMatrix, nrow,k,Linds,Lvals)
1333+
1334+ CALL List_AddMatrixRow(Projector % ListMatrix, nrow,k,Linds,Lvals,KeepOrder= Biorthogonal)
1335+ IF (BiOrthogonal) THEN
1336+ CALL List_AddMatrixRow(Projector % Child % ListMatrix,nrow,k,Linds,Lvals2)
1337+ END IF
13421338
13431339 k = 0
13441340 DO i= 1 ,ndM
13451341 IF ( ABS ( val * BasisM(i) ) < 1.0d-12 ) CYCLE
1346-
13471342 ! Nmaster = Nmaster + 1
13481343 k = k+1
13491344 Linds(k) = InvPermM(IndexesM(i))
13501345 Lvals(k) = - NodeScale * BasisM(i) * val
13511346
1352-
1353- ! CALL List_AddToMatrixElement(Projector % ListMatrix, nrow, &
1354- ! InvPermM(IndexesM(i)), -NodeScale * BasisM(i) * val )
1355-
13561347 IF (BiOrthogonal) THEN
13571348 IF (DualMaster .OR. DualLCoeff) THEN
1358- CALL List_AddToMatrixElement(Projector % Child % ListMatrix, nrow, &
1359- InvPermM(IndexesM(i)), - NodeScale * BasisM(i) * val_dual )
1349+ Lvals2(k) = - NodeScale * BasisM(i) * val_dual
13601350 ELSE
1361- CALL List_AddToMatrixElement(Projector % Child % ListMatrix, nrow, &
1362- InvPermM(IndexesM(i)), - NodeScale * BasisM(i) * val )
1351+ Lvals2(k) = - NodeScale * BasisM(i) * val
13631352 END IF
13641353 END IF
13651354 END DO
1366- CALL List_AddMatrixRow(Projector % ListMatrix, nrow,k,Linds,Lvals)
1355+ CALL List_AddMatrixRow(Projector % ListMatrix, nrow,k,Linds,Lvals,KeepOrder= Biorthogonal)
1356+ IF (BiOrthogonal) THEN
1357+ CALL List_AddMatrixRow(Projector % Child % ListMatrix,nrow,k,Linds,Lvals2)
1358+ END IF
13671359
13681360 END DO
13691361 END DO
@@ -1563,20 +1555,10 @@ SUBROUTINE TemporalSegmentMortarAssembly(ElementT, NodesT, Element, Nodes, Eleme
15631555 Linds(1 :nM) = InvPermM(IndexesM(1 :nM))
15641556 Lvals(1 :nM) = sgn0 * BasisM(1 :nM) * val
15651557 CALL List_AddMatrixRow(DualProjector % ListMatrix,nrow,nM,Linds,Lvals)
1566-
1567- ! DO i=1,nM
1568- ! CALL List_AddToMatrixElement(DualProjector % ListMatrix, nrow, &
1569- ! InvPermM(IndexesM(i)), sgn0 * BasisM(i) * val )
1570- ! END DO
15711558
15721559 Linds(1 :n) = InvPerm(IndexesM(1 :nM))
15731560 Lvals(1 :n) = - NodeScale * Basis(1 :n) * val
15741561 CALL List_AddMatrixRow(DualProjector % ListMatrix,nrow,n,Linds,Lvals)
1575-
1576- ! DO i=1,n
1577- ! CALL List_AddToMatrixElement(DualProjector % ListMatrix, nrow, &
1578- ! InvPerm(Indexes(i)), -NodeScale * Basis(i) * val )
1579- ! END DO
15801562 END DO
15811563 END IF
15821564 END DO
0 commit comments