11! ##################################################################################################################################
2- ! Begin MIT license text.
2+ ! Begin MIT license text.
33! _______________________________________________________________________________________________________
4-
5- ! Copyright 2022 Dr William R Case, Jr (mystransolver@gmail.com)
6-
7- ! Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
4+
5+ ! Copyright 2022 Dr William R Case, Jr (mystransolver@gmail.com)
6+
7+ ! Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
88! associated documentation files (the "Software"), to deal in the Software without restriction, including
99! without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10- ! copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to
11- ! the following conditions:
12-
13- ! The above copyright notice and this permission notice shall be included in all copies or substantial
14- ! portions of the Software and documentation.
15-
16- ! THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17- ! OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18- ! FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19- ! AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20- ! LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21- ! OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22- ! THE SOFTWARE.
10+ ! copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to
11+ ! the following conditions:
12+
13+ ! The above copyright notice and this permission notice shall be included in all copies or substantial
14+ ! portions of the Software and documentation.
15+
16+ ! THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17+ ! OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+ ! FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+ ! AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+ ! LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+ ! OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22+ ! THE SOFTWARE.
2323! _______________________________________________________________________________________________________
24-
25- ! End MIT license text.
24+
25+ ! End MIT license text.
2626
2727 SUBROUTINE RBE3_PROC ( RTYPE , REC_NO , IERR )
2828
2929! Processes a single RBE3 "rigid" element, per call, to get terms for the RMG constraint matrix. When the Bulk data was read, the
3030! RBE3 input data was written to file LINK1F. In this subr, file LINK1F is read and RBE3 terms for array RMG are calculated and
3131! written to file LINK1J. Later, in subr SPARSE_RMG, LINK1J will be read to create the sparse array RMG (of all rigid element and
32- ! MPC coefficients) which will be used in LINK2 to reduce the G-set mass, stiffness and load matrices to the N-set.
32+ ! MPC coefficients) which will be used in LINK2 to reduce the G-set mass, stiffness and load matrices to the N-set.
3333
3434! The derivation of the equations for the RBE3 are shown in Appendix E to the MYSTRAN User's Reference Manual
35-
35+
3636 USE PENTIUM_II_KIND, ONLY : BYTE, LONG, DOUBLE
3737 USE IOUNT1, ONLY : WRT_ERR, WRT_LOG, ERR, F04, F06, L1F, LINK1F, L1F_MSG, L1J
3838 USE SCONTR, ONLY : BLNK_SUB_NAM, FATAL_ERR, MRBE3, NCORD, NGRID, NTERM_RMG
@@ -42,11 +42,11 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
4242 USE PARAMS, ONLY : EPSIL
4343 USE SUBR_BEGEND_LEVELS, ONLY : RIGID_ELEM_PROC_BEGEND
4444 USE DOF_TABLES, ONLY : TDOF, TDOF_ROW_START
45-
45+
4646 USE RBE3_PROC_USE_IFs
4747
4848 IMPLICIT NONE
49-
49+
5050 CHARACTER (LEN= LEN (BLNK_SUB_NAM)):: SUBR_NAME = ' RBE3_PROC'
5151 CHARACTER ( 8 * BYTE), INTENT (IN ) :: RTYPE ! The type of rigid element being processed (RBE2)
5252 CHARACTER ( 1 * BYTE) :: CDOF_D(6 ) ! An output from subr RDOF (= 1 if a displ comp is in COMPS_D)
@@ -74,7 +74,7 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
7474 INTEGER (LONG) :: ITERM_RMG ! Countof number of records written to L1J (should be NTERM_RMG at end)
7575 INTEGER (LONG) :: M_SET_COL_NUM ! Col no., in TDOF array, of the M-set DOF list
7676 INTEGER (LONG) :: NUM_COMPS ! Number of displ components for a grid
77- INTEGER (LONG) :: OUNT(2 ) ! File units to write messages to. Input to subr UNFORMATTED_OPEN
77+ INTEGER (LONG) :: OUNT(2 ) ! File units to write messages to. Input to subr UNFORMATTED_OPEN
7878 INTEGER (LONG) :: REID ! RBE2 elem ID read from file LINK1F
7979 INTEGER (LONG) :: RMG_COL_NUM_D(6 ) ! Col no's. in RMG for 6 components of dep DOF at ref pt (if they exist)
8080 INTEGER (LONG) :: RMG_ROW_NUM ! Row no. of a term in array RMG
@@ -130,14 +130,14 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
130130
131131! 5th record, and on, : GRID(3), COMP(3), WTi(3): 3rd independent grid, the independent components and the weight for this grid
132132
133- ! The above record structure is repeated for each RBE3 logical card in the data deck (in the order in which they were read from the
133+ ! The above record structure is repeated for each RBE3 logical card in the data deck (in the order in which they were read from the
134134! B.D. deck).
135135
136136! Make units for writing errors the error file and output file
137-
137+
138138 OUNT(1 ) = ERR
139139 OUNT(2 ) = F06
140-
140+
141141 EPS1 = EPSIL(1 )
142142
143143 JERR = 0
@@ -184,15 +184,14 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
184184 WT6(J) = WT6(J) + WTi(I)
185185 END IF
186186 END DO
187- WRITE (f06,* )
188187 ENDDO
189188
190189! Return if error
191190
192191 IF (JERR /= 0 ) THEN
193192 FATAL_ERR = FATAL_ERR + 1
194193 RETURN
195- ENDIF
194+ ENDIF
196195
197196! Get T0D (transforms global vector at AGRID_D to basic)
198197
@@ -204,15 +203,15 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
204203 ICORD_D = I
205204 EXIT
206205 ENDIF
207- ENDDO
206+ ENDDO
208207 CALL GEN_T0L ( GRID_ID_ROW_NUM_D, ICORD_D, THETAD, PHID, T0D )
209208 ELSE
210209 DO I= 1 ,3
211210 DO J= 1 ,3
212211 T0D(I,J) = ZERO
213- ENDDO
212+ ENDDO
214213 T0D(I,I) = ONE
215- ENDDO
214+ ENDDO
216215 ENDIF
217216
218217! Get coords of the reference grid (AGRID_D) in basic coord system
@@ -245,7 +244,7 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
245244 DY_BAR = DY_BAR + WTi6(J,2 )* DYI(J)
246245 DZ_BAR = DZ_BAR + WTi6(J,3 )* DZI(J)
247246
248-
247+
249248 ENDDO
250249
251250
@@ -307,7 +306,7 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
307306 IF ((RMG_ROW_NUM > 0 ) .AND. (RMG_COL_NUM_D(I) > 0 )) THEN
308307 ! Write coeff for the T1, T2 or T3 component at the ref pt
309308 IF ((I == 1 ) .OR. (I == 2 ) .OR. (I == 3 )) THEN
310- IF (DABS(WT) > EPS1) THEN
309+ IF (DABS(WT) > EPS1) THEN
311310 WRITE (L1J) RMG_ROW_NUM, RMG_COL_NUM_D(I), WT6(I)
312311 ITERM_RMG = ITERM_RMG + 1
313312 ELSE
@@ -320,43 +319,43 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
320319 IF (I == 1 ) THEN ! Write coeffs for the R2, R3 comps at the ref pt for the 1st eqn
321320
322321 IF (CDOF_D(5 ) /= ' 0' ) THEN
323- WRITE (L1J) RMG_ROW_NUM, RMG_COL_NUM_D(5 ), + DZ_BAR
322+ WRITE (L1J) RMG_ROW_NUM, RMG_COL_NUM_D(5 ), + DZ_BAR
324323 ITERM_RMG = ITERM_RMG + 1
325324 ENDIF
326325
327326 IF (CDOF_D(6 ) /= ' 0' ) THEN
328- WRITE (L1J) RMG_ROW_NUM, RMG_COL_NUM_D(6 ), - DY_BAR
327+ WRITE (L1J) RMG_ROW_NUM, RMG_COL_NUM_D(6 ), - DY_BAR
329328 ITERM_RMG = ITERM_RMG + 1
330329 ENDIF
331330
332331 ELSE IF (I == 2 ) THEN ! Write coeffs for the R1, R3 comps at the ref pt for the 2nd eqn
333332
334333 IF (CDOF_D(4 ) /= ' 0' ) THEN
335- WRITE (L1J) RMG_ROW_NUM, RMG_COL_NUM_D(4 ), - DZ_BAR
334+ WRITE (L1J) RMG_ROW_NUM, RMG_COL_NUM_D(4 ), - DZ_BAR
336335 ITERM_RMG = ITERM_RMG + 1
337336 ENDIF
338337
339338 IF (CDOF_D(6 ) /= ' 0' ) THEN
340- WRITE (L1J) RMG_ROW_NUM, RMG_COL_NUM_D(6 ), + DX_BAR
339+ WRITE (L1J) RMG_ROW_NUM, RMG_COL_NUM_D(6 ), + DX_BAR
341340 ITERM_RMG = ITERM_RMG + 1
342341 ENDIF
343342
344343 ELSE IF (I == 3 ) THEN ! Write coeffs for the R1, R2 comps at the ref pt for the 3rd eqn
345344
346345 IF (CDOF_D(4 ) /= ' 0' ) THEN
347- WRITE (L1J) RMG_ROW_NUM, RMG_COL_NUM_D(4 ), + DY_BAR
346+ WRITE (L1J) RMG_ROW_NUM, RMG_COL_NUM_D(4 ), + DY_BAR
348347 ITERM_RMG = ITERM_RMG + 1
349348 ENDIF
350349
351350 IF (CDOF_D(5 ) /= ' 0' ) THEN
352- WRITE (L1J) RMG_ROW_NUM, RMG_COL_NUM_D(5 ), - DX_BAR
351+ WRITE (L1J) RMG_ROW_NUM, RMG_COL_NUM_D(5 ), - DX_BAR
353352 ITERM_RMG = ITERM_RMG + 1
354353 ENDIF
355354
356355 ENDIF
357356 ! Write coeffs for the R1, R2 and R3 comps at the ref pt for eqns 4,5,6
358- IF (I == 4 ) THEN
359- IF (DABS(EBAR_YZ) > EPS1) THEN
357+ IF (I == 4 ) THEN
358+ IF (DABS(EBAR_YZ) > EPS1) THEN
360359 WRITE (L1J) RMG_ROW_NUM, RMG_COL_NUM_D(I), EBAR_YZ
361360 ITERM_RMG = ITERM_RMG + 1
362361 ELSE
@@ -371,8 +370,8 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
371370 ITERM_RMG = ITERM_RMG + 1
372371 ENDIF
373372
374- IF (I == 5 ) THEN
375- IF (DABS(EBAR_ZX) > EPS1) THEN
373+ IF (I == 5 ) THEN
374+ IF (DABS(EBAR_ZX) > EPS1) THEN
376375 WRITE (L1J) RMG_ROW_NUM, RMG_COL_NUM_D(I), EBAR_ZX
377376 ITERM_RMG = ITERM_RMG + 1
378377 ELSE
@@ -387,8 +386,8 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
387386 ITERM_RMG = ITERM_RMG + 1
388387 ENDIF
389388
390- IF (I == 6 ) THEN
391- IF (DABS(EBAR_XY) > EPS1) THEN
389+ IF (I == 6 ) THEN
390+ IF (DABS(EBAR_XY) > EPS1) THEN
392391 WRITE (L1J) RMG_ROW_NUM, RMG_COL_NUM_D(I), EBAR_XY
393392 ITERM_RMG = ITERM_RMG + 1
394393 ELSE
@@ -398,7 +397,7 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
398397
399398 WRITE (L1J) RMG_ROW_NUM, RMG_COL_NUM_D(4 ), - SZX
400399 ITERM_RMG = ITERM_RMG + 1
401-
400+
402401 WRITE (L1J) RMG_ROW_NUM, RMG_COL_NUM_D(5 ), - SYZ
403402 ITERM_RMG = ITERM_RMG + 1
404403 ENDIF
@@ -444,7 +443,7 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
444443do_j1: DO J= 1 ,IRBE3 ! Cycle over "indep" terms (some here may actually be dep elsewhere)
445444 ! Get T0I (transforms global vector at AGRID_I to basic)
446445 CALL RDOF ( COMPS_I(J), CDOF_I )
447-
446+
448447 CALL GET_GRID_NUM_COMPS ( AGRID_I(J), NUM_COMPS, SUBR_NAME )
449448 IF (NUM_COMPS /= 6 ) THEN
450449 IERR = IERR + 1
@@ -463,15 +462,15 @@ SUBROUTINE RBE3_PROC ( RTYPE, REC_NO, IERR )
463462 ICORD_I = K
464463 EXIT
465464 ENDIF
466- ENDDO
465+ ENDDO
467466 CALL GEN_T0L ( GRID_ID_ROW_NUM_I, ICORD_I, THETAD, PHID, T0I )
468467 ELSE
469468 DO K= 1 ,3
470469 DO L= 1 ,3
471470 T0I(K,L) = ZERO
472- ENDDO
471+ ENDDO
473472 T0I(K,K) = ONE
474- ENDDO
473+ ENDDO
475474 ENDIF
476475
477476 CALL MATMULT_FFF_T ( T0D, T0I, 3 , 3 , 3 , TDI )
@@ -614,9 +613,9 @@ SUBROUTINE WRITE_L1J_456 ( I, J, ITERM_RMG, G_SET_COL_NUM, RMG_ROW_NUM, WTi6, AG
614613 INTEGER (LONG) :: RMG_COL_NUM_START ! Col no. of a term in array RMG
615614 INTEGER (LONG) :: ROW_NUM_START_I ! DOF number where TDOF data begins for a grid
616615
617- REAL (DOUBLE) , INTENT (IN ) :: DXI(MRBE3) ! Distances from ref pt to pt i in X global directions at ref pt
618- REAL (DOUBLE) , INTENT (IN ) :: DYI(MRBE3) ! Distances from ref pt to pt i in Y global directions at ref pt
619- 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 ) :: DXI(MRBE3) ! Distances from ref pt to pt i in X global directions at ref pt
617+ REAL (DOUBLE) , INTENT (IN ) :: DYI(MRBE3) ! Distances from ref pt to pt i in Y global directions at ref pt
618+ REAL (DOUBLE) , INTENT (IN ) :: DZI(MRBE3) ! Distances from ref pt to pt i in Z global directions at ref pt
620619 REAL (DOUBLE) , INTENT (IN ) :: WTi6(MRBE3,6 ) ! Weight value for an indep grid (PER-DOF)
621620
622621! **********************************************************************************************************************************
@@ -644,7 +643,7 @@ SUBROUTINE WRITE_L1J_456 ( I, J, ITERM_RMG, G_SET_COL_NUM, RMG_ROW_NUM, WTi6, AG
644643 ITERM_RMG = ITERM_RMG + 1
645644 ENDIF
646645
647- ELSE IF (I == 5 ) THEN ! Rotation about y, i.e. in zx (31) plane
646+ ELSE IF (I == 5 ) THEN ! Rotation about y, i.e. in zx (31) plane
648647
649648 IF (CDOF_I(1 ) == ' 1' ) THEN
650649 WRITE (L1J) RMG_ROW_NUM, (RMG_COL_NUM_START-1 )+ 1 , - WTi6(J,2 )* DZI(J)
@@ -668,7 +667,7 @@ SUBROUTINE WRITE_L1J_456 ( I, J, ITERM_RMG, G_SET_COL_NUM, RMG_ROW_NUM, WTi6, AG
668667 ITERM_RMG = ITERM_RMG + 1
669668 ENDIF
670669
671- ENDIF
670+ ENDIF
672671
673672! **********************************************************************************************************************************
674673 1513 FORMAT (' *ERROR 1513: PROGRAMMING ERROR IN SUBROUTINE ' ,A &
0 commit comments