Skip to content

Commit 09b0b13

Browse files
committed
use per-DOF weights and get rid of divisions in the RBE3
1 parent 2b2e4b3 commit 09b0b13

1 file changed

Lines changed: 36 additions & 32 deletions

File tree

Source/LK1/L1D/RBE3_PROC.f90

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
105105
REAL(DOUBLE) :: WT6(6) ! WT6(i) = Sum of weights in comp i of an indep grid NB *** new 10/03/21
106106

107107
REAL(DOUBLE) :: SXY,SZX,SYZ ! new Rdd terms according to victor
108+
REAL(DOUBLE) :: WTi6(MRBE3,6) ! per-DoF grid weights
108109

109110
! **********************************************************************************************************************************
110111
IF (WRT_LOG >= SUBR_BEGEND) THEN
@@ -147,6 +148,9 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
147148
WT6(I) = ZERO ! NB *** new 10/03/21
148149
ENDDO ! NB *** new 10/03/21
149150

151+
! zero-init WTi6
152+
WTi6 = ZERO
153+
150154
! Start reading at the 2nd record of L1F for this RBE3 (first record, RYPE, was read above in calling subr, RIGID_ELEM_PROC):
151155
! Read 2nd record from L1F for this RBE3
152156
READ(L1F,IOSTAT=IOCHK) REID, AGRID_D, COMPS_D, IRBE3, WT
@@ -173,14 +177,14 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
173177
IERR = IERR + 1
174178
JERR = JERR + 1
175179
ENDIF
176-
CALL RDOF ( COMPS_I(I), CDOF_I ) ! NB *** new 10/03/21 + next 6 lines
177-
IF (CDOF_I(1) == '1') THEN ; WT6(1) = WT6(1) + WTi(I) ; ENDIF
178-
IF (CDOF_I(2) == '1') THEN ; WT6(2) = WT6(2) + WTi(I) ; ENDIF
179-
IF (CDOF_I(3) == '1') THEN ; WT6(3) = WT6(3) + WTi(I) ; ENDIF
180-
IF (CDOF_I(4) == '1') THEN ; WT6(4) = WT6(4) + WTi(I) ; ENDIF
181-
IF (CDOF_I(5) == '1') THEN ; WT6(5) = WT6(5) + WTi(I) ; ENDIF
182-
IF (CDOF_I(6) == '1') THEN ; WT6(6) = WT6(6) + WTi(I) ; ENDIF
183-
write(f06,*)
180+
CALL RDOF ( COMPS_I(I), CDOF_I )
181+
DO J=1,6
182+
IF (CDOF_I(J) == '1') THEN
183+
WTi6(I,J) = WTi(I)
184+
WT6(J) = WT6(J) + WTi(I)
185+
END IF
186+
END DO
187+
WRITE(f06,*)
184188
ENDDO
185189

186190
! Return if error
@@ -237,9 +241,9 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
237241
DYI(J) = DUM3(2)
238242
DZI(J) = DUM3(3)
239243

240-
DX_BAR = DX_BAR + WTi(J)*DXI(J)/WT6(1) ! NB *** new 10/03/21. Change WT to WT6(1)
241-
DY_BAR = DY_BAR + WTi(J)*DYI(J)/WT6(2) ! NB *** new 10/03/21. Change WT to WT6(2)
242-
DZ_BAR = DZ_BAR + WTi(J)*DZI(J)/WT6(3) ! NB *** new 10/03/21. Change WT to WT6(3)
244+
DX_BAR = DX_BAR + WTi6(J,1)*DXI(J)
245+
DY_BAR = DY_BAR + WTi6(J,2)*DYI(J)
246+
DZ_BAR = DZ_BAR + WTi6(J,3)*DZI(J)
243247

244248

245249
ENDDO
@@ -253,9 +257,9 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
253257

254258
DO J=1,IRBE3
255259

256-
EBAR_YZ = EBAR_YZ + WTi(J)*( DYI(J)*DYI(J) + DZI(J)*DZI(J) )/WT
257-
EBAR_ZX = EBAR_ZX + WTi(J)*( DZI(J)*DZI(J) + DXI(J)*DXI(J) )/WT
258-
EBAR_XY = EBAR_XY + WTi(J)*( DXI(J)*DXI(J) + DYI(J)*DYI(J) )/WT
260+
EBAR_YZ = EBAR_YZ + WTi6(J,3)*DYI(J)*DYI(J) + WTi6(J,2)*DZI(J)*DZI(J)
261+
EBAR_ZX = EBAR_ZX + WTi6(J,1)*DZI(J)*DZI(J) + WTi6(J,3)*DXI(J)*DXI(J)
262+
EBAR_XY = EBAR_XY + WTi6(J,2)*DXI(J)*DXI(J) + WTi6(J,1)*DYI(J)*DYI(J)
259263

260264
ENDDO
261265

@@ -265,9 +269,9 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
265269
SYZ = ZERO
266270

267271
DO J=1,IRBE3
268-
SXY = SXY + WTi(J) * DXI(J) * DYI(J) / WT
269-
SZX = SZX + WTi(J) * DZI(J) * DXI(J) / WT
270-
SYZ = SYZ + WTi(J) * DYI(J) * DZI(J) / WT
272+
SXY = SXY + WTi6(J,3) * DXI(J) * DYI(J)
273+
SZX = SZX + WTi6(J,2) * DZI(J) * DXI(J)
274+
SYZ = SYZ + WTi6(J,1) * DYI(J) * DZI(J)
271275
END DO
272276

273277
CALL TDOF_COL_NUM ( 'G ', G_SET_COL_NUM )
@@ -304,10 +308,10 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
304308
! Write coeff for the T1, T2 or T3 component at the ref pt
305309
IF ((I == 1) .OR. (I == 2) .OR. (I == 3)) THEN
306310
IF (DABS(WT) > EPS1) THEN
307-
WRITE(L1J) RMG_ROW_NUM, RMG_COL_NUM_D(I), ONE
311+
WRITE(L1J) RMG_ROW_NUM, RMG_COL_NUM_D(I), WT6(I)
308312
ITERM_RMG = ITERM_RMG + 1
309313
ELSE
310-
WRITE(L1J) RMG_ROW_NUM, RMG_COL_NUM_D(I), ONE
314+
WRITE(L1J) RMG_ROW_NUM, RMG_COL_NUM_D(I), WT6(I)
311315
ITERM_RMG = ITERM_RMG + 1
312316
CYCLE do_i1
313317
ENDIF
@@ -473,9 +477,9 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
473477
CALL MATMULT_FFF_T ( T0D, T0I, 3, 3, 3, TDI )
474478

475479
IF ((I == 1) .OR. (I == 2) .OR. (I == 3)) THEN
476-
CALL WRITE_L1J_123 ( I, J, ITERM_RMG, G_SET_COL_NUM, RMG_ROW_NUM, WTi, AGRID_I, CDOF_I, COMPS_I, TDI )
480+
CALL WRITE_L1J_123 ( I, J, ITERM_RMG, G_SET_COL_NUM, RMG_ROW_NUM, WTi6, AGRID_I, CDOF_I, COMPS_I, TDI )
477481
ELSE
478-
CALL WRITE_L1J_456 ( I, J, ITERM_RMG, G_SET_COL_NUM, RMG_ROW_NUM, WTi, AGRID_I, CDOF_I, DXI, DYI, DZI )
482+
CALL WRITE_L1J_456 ( I, J, ITERM_RMG, G_SET_COL_NUM, RMG_ROW_NUM, WTi6, AGRID_I, CDOF_I, DXI, DYI, DZI )
479483
ENDIF
480484

481485
ENDDO do_j1
@@ -529,7 +533,7 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
529533

530534
! ##################################################################################################################################
531535

532-
SUBROUTINE WRITE_L1J_123 ( I, J, ITERM_RMG, G_SET_COL_NUM, RMG_ROW_NUM, WTi, AGRID_I, CDOF_I, COMPS_I, TDI )
536+
SUBROUTINE WRITE_L1J_123 ( I, J, ITERM_RMG, G_SET_COL_NUM, RMG_ROW_NUM, WTi6, AGRID_I, CDOF_I, COMPS_I, TDI )
533537

534538
USE PENTIUM_II_KIND, ONLY : LONG, DOUBLE
535539
USE IOUNT1, ONLY : L1J
@@ -552,7 +556,7 @@ SUBROUTINE WRITE_L1J_123 ( I, J, ITERM_RMG, G_SET_COL_NUM, RMG_ROW_NUM, WTi, AGR
552556
INTEGER(LONG) :: ROW_NUM_START_I ! DOF number where TDOF data begins for a grid
553557

554558
REAL(DOUBLE) , INTENT(IN) :: TDI(3,3) ! TOD'*T0I
555-
REAL(DOUBLE) , INTENT(IN) :: WTi(MRBE3) ! Weight value for an indep grid
559+
REAL(DOUBLE) , INTENT(IN) :: WTi6(MRBE3,6) ! Weight value for an indep grid (PER-DOF)
556560

557561
! **********************************************************************************************************************************
558562

@@ -566,7 +570,7 @@ SUBROUTINE WRITE_L1J_123 ( I, J, ITERM_RMG, G_SET_COL_NUM, RMG_ROW_NUM, WTi, AGR
566570
RMG_COL_NUM_I = TDOF(ROW_NUM,G_SET_COL_NUM)
567571

568572
IF (RMG_COL_NUM_I > 0) THEN ! NB *** new 10/03/21 Change WT (below) to WT6(K)
569-
WRITE(L1J) RMG_ROW_NUM, RMG_COL_NUM_I, -WTi(J)*TDI(I,K)/WT6(K)
573+
WRITE(L1J) RMG_ROW_NUM, RMG_COL_NUM_I, -WTi6(J,K)*TDI(I,K)
570574
ITERM_RMG = ITERM_RMG + 1
571575
ELSE
572576
WRITE(ERR,1513) 'RBE3_PROC', AGRID_I(J) ,COMPS_I(J), RMG_COL_NUM_I
@@ -590,7 +594,7 @@ END SUBROUTINE WRITE_L1J_123
590594

591595
! ##################################################################################################################################
592596

593-
SUBROUTINE WRITE_L1J_456 ( I, J, ITERM_RMG, G_SET_COL_NUM, RMG_ROW_NUM, WTi, AGRID_I, CDOF_I, DXI, DYI, DZI )
597+
SUBROUTINE WRITE_L1J_456 ( I, J, ITERM_RMG, G_SET_COL_NUM, RMG_ROW_NUM, WTi6, AGRID_I, CDOF_I, DXI, DYI, DZI )
594598

595599
USE PENTIUM_II_KIND, ONLY : LONG, DOUBLE
596600
USE IOUNT1, ONLY : L1J
@@ -613,7 +617,7 @@ SUBROUTINE WRITE_L1J_456 ( I, J, ITERM_RMG, G_SET_COL_NUM, RMG_ROW_NUM, WTi, AGR
613617
REAL(DOUBLE) , INTENT(IN) :: DXI(MRBE3) ! Distances from ref pt to pt i in X global directions at ref pt
614618
REAL(DOUBLE) , INTENT(IN) :: DYI(MRBE3) ! Distances from ref pt to pt i in Y global directions at ref pt
615619
REAL(DOUBLE) , INTENT(IN) :: DZI(MRBE3) ! Distances from ref pt to pt i in Z global directions at ref pt
616-
REAL(DOUBLE) , INTENT(IN) :: WTi(MRBE3) ! Weight value for an indep grid
620+
REAL(DOUBLE) , INTENT(IN) :: WTi6(MRBE3,6) ! Weight value for an indep grid (PER-DOF)
617621

618622
! **********************************************************************************************************************************
619623
!xx CALL CALC_TDOF_ROW_NUM ( AGRID_I(J), ROW_NUM_START_I, 'N' )
@@ -631,36 +635,36 @@ SUBROUTINE WRITE_L1J_456 ( I, J, ITERM_RMG, G_SET_COL_NUM, RMG_ROW_NUM, WTi, AGR
631635
IF (I == 4) THEN ! Rotation about x, i.e. in yz (23) plane
632636

633637
IF (CDOF_I(2) == '1') THEN
634-
WRITE(L1J) RMG_ROW_NUM, (RMG_COL_NUM_START-1)+2, +WTi(J)*DZI(J)/WT
638+
WRITE(L1J) RMG_ROW_NUM, (RMG_COL_NUM_START-1)+2, +WTi6(J,1)*DZI(J)
635639
ITERM_RMG = ITERM_RMG +1
636640
ENDIF
637641

638642
IF (CDOF_I(3) == '1') THEN
639-
WRITE(L1J) RMG_ROW_NUM, (RMG_COL_NUM_START-1)+3, -WTi(J)*DYI(J)/WT
643+
WRITE(L1J) RMG_ROW_NUM, (RMG_COL_NUM_START-1)+3, -WTi6(J,1)*DYI(J)
640644
ITERM_RMG = ITERM_RMG +1
641645
ENDIF
642646

643647
ELSE IF (I == 5) THEN ! Rotation about y, i.e. in zx (31) plane
644648

645649
IF (CDOF_I(1) == '1') THEN
646-
WRITE(L1J) RMG_ROW_NUM, (RMG_COL_NUM_START-1)+1, -WTi(J)*DZI(J)/WT
650+
WRITE(L1J) RMG_ROW_NUM, (RMG_COL_NUM_START-1)+1, -WTi6(J,2)*DZI(J)
647651
ITERM_RMG = ITERM_RMG +1
648652
ENDIF
649653

650654
IF (CDOF_I(3) == '1') THEN
651-
WRITE(L1J) RMG_ROW_NUM, (RMG_COL_NUM_START-1)+3, +WTi(J)*DXI(J)/WT
655+
WRITE(L1J) RMG_ROW_NUM, (RMG_COL_NUM_START-1)+3, +WTi6(J,2)*DXI(J)
652656
ITERM_RMG = ITERM_RMG +1
653657
ENDIF
654658

655659
ELSE IF (I == 6) THEN ! Rotation about z, i.e. in xy (12) plane
656660

657661
IF (CDOF_I(1) == '1') THEN
658-
WRITE(L1J) RMG_ROW_NUM, (RMG_COL_NUM_START-1)+1, +WTi(J)*DYI(J)/WT
662+
WRITE(L1J) RMG_ROW_NUM, (RMG_COL_NUM_START-1)+1, +WTi6(J,3)*DYI(J)
659663
ITERM_RMG = ITERM_RMG +1
660664
ENDIF
661665

662666
IF (CDOF_I(2) == '1') THEN
663-
WRITE(L1J) RMG_ROW_NUM, (RMG_COL_NUM_START-1)+2, -WTi(J)*DXI(J)/WT
667+
WRITE(L1J) RMG_ROW_NUM, (RMG_COL_NUM_START-1)+2, -WTi6(J,3)*DXI(J)
664668
ITERM_RMG = ITERM_RMG +1
665669
ENDIF
666670

0 commit comments

Comments
 (0)