@@ -41,16 +41,17 @@ SUBROUTINE HEXA ( OPT, INT_ELEM_ID,IORD, RED_INT_SHEAR, WRITE_WARN )
4141 USE IOUNT1, ONLY : WRT_ERR, WRT_LOG, ERR, F04, F06
4242 USE SCONTR, ONLY : BLNK_SUB_NAM, FATAL_ERR, MAX_ORDER_GAUSS, MELDOF, MPLOAD4_3D_DATA, NPLOAD4_3D, NSUB, NTSUB
4343 USE TIMDAT, ONLY : TSEC
44- USE CONSTANTS_1, ONLY : QUARTER, HALF, ZERO, ONE, EIGHT
44+ USE CONSTANTS_1, ONLY : QUARTER, HALF, ZERO, ONE
4545 USE DEBUG_PARAMETERS, ONLY : DEBUG
4646 USE SUBR_BEGEND_LEVELS, ONLY : HEXA_BEGEND
4747 USE PARAMS, ONLY : EPSIL
4848 USE NONLINEAR_PARAMS, ONLY : LOAD_ISTEP
4949 USE MODEL_STUF, ONLY : AGRID, ALPVEC, BE1, BE2, DT, EID, ELGP, NUM_EMG_FATAL_ERRS, ES, KE, KED, ME, &
5050 NUM_EMG_FATAL_ERRS, PLOAD4_3D_DATA, PPE, PRESS, PTE, RHO, SE1, SE2, STE1, STRESS, TREF, &
5151 TYPE, XEL
52-
5352 USE HEXA_USE_IFs
53+ USE EXPAND_MASS_DOFS_Interface
54+
5455
5556 IMPLICIT NONE
5657
@@ -126,7 +127,6 @@ SUBROUTINE HEXA ( OPT, INT_ELEM_ID,IORD, RED_INT_SHEAR, WRITE_WARN )
126127 REAL (DOUBLE) :: JAC(3 ,3 ) ! An output from subr JAC3D, called herein. 3 x 3 Jacobian matrix.
127128 REAL (DOUBLE) :: JACI(3 ,3 ) ! An output from subr JAC3D, called herein. 3 x 3 Jacobian inverse.
128129 REAL (DOUBLE) :: KWW(3 ,3 ) ! Portion of differential stiffness matrix
129- REAL (DOUBLE) :: M0 ! An intermediate variable used in calc elem mass, ME
130130 REAL (DOUBLE) :: PSH(ELGP) ! Output from subr SHP3DH. Shape fcn at Gauss pts SSI, SSJ
131131 REAL (DOUBLE) :: PSIGN !
132132 REAL (DOUBLE) :: SIGxx ! Normal stress in the elem x direction
@@ -145,7 +145,8 @@ SUBROUTINE HEXA ( OPT, INT_ELEM_ID,IORD, RED_INT_SHEAR, WRITE_WARN )
145145 REAL (DOUBLE) :: TGAUSS(1 ,NTSUB) ! Temp at a Gauss point for a theral subcase
146146 REAL (DOUBLE) :: VOLUME ! 3D element volume
147147 REAL (DOUBLE) :: SSI,SSJ,SSK ! Isoparametric coordinates of a point.
148-
148+ REAL (DOUBLE) :: M_1DOF(ELGP,ELGP) ! Consistent mass matrix with 1 DOF per node.
149+
149150! **********************************************************************************************************************************
150151 IF (WRT_LOG >= SUBR_BEGEND) THEN
151152 CALL OURTIM
@@ -224,39 +225,32 @@ SUBROUTINE HEXA ( OPT, INT_ELEM_ID,IORD, RED_INT_SHEAR, WRITE_WARN )
224225
225226 IF (OPT(1 ) == ' Y' ) THEN
226227
227- M0 = (RHO(1 ))* VOLUME/ EIGHT
228-
229- ME( 1 ,1 ) = M0
230- ME( 2 ,2 ) = M0
231- ME( 3 ,3 ) = M0
232-
233- ME( 7 ,7 ) = M0
234- ME( 8 ,8 ) = M0
235- ME( 9 ,9 ) = M0
228+ ! Consistent mass matrix
229+ ! ME = ∫ N' ρ N det(J) dv
236230
237- ME(13 ,13 ) = M0
238- ME(14 ,14 ) = M0
239- ME(15 ,15 ) = M0
231+ M_1DOF(:,:) = ZERO
232+ GAUSS_PT = 0
233+ CALL ORDER_GAUSS ( IORD, SSS, HHH )
234+ DO K= 1 ,IORD
235+ DO J= 1 ,IORD
236+ DO I= 1 ,IORD
237+ GAUSS_PT = GAUSS_PT + 1
240238
241- ME(19 ,19 ) = M0
242- ME(20 ,20 ) = M0
243- ME(21 ,21 ) = M0
239+ CALL SHP3DH ( I, J, K, ELGP, SUBR_NAME, IORD_MSG, IORD, SSS(I), SSS(J), SSS(K), ' N' , PSH, DPSHG )
240+ INTFAC = DETJ(GAUSS_PT)* HHH(I)* HHH(J)* HHH(K)
244241
245- ME(25 ,25 ) = M0
246- ME(26 ,26 ) = M0
247- ME(27 ,27 ) = M0
242+ DO L= 1 ,ELGP
243+ DO M= 1 ,ELGP
244+ M_1DOF(L,M) = M_1DOF(L,M) + PSH(L) * PSH(M) * RHO(1 ) * INTFAC
245+ ENDDO
246+ ENDDO
248247
249- ME( 31 , 31 ) = M0
250- ME( 32 , 32 ) = M0
251- ME( 33 , 33 ) = M0
248+ ENDDO
249+ ENDDO
250+ ENDDO
252251
253- ME(37 ,37 ) = M0
254- ME(38 ,38 ) = M0
255- ME(39 ,39 ) = M0
256252
257- ME(43 ,43 ) = M0
258- ME(44 ,44 ) = M0
259- ME(45 ,45 ) = M0
253+ CALL EXPAND_MASS_DOFS( M_1DOF )
260254
261255 ENDIF
262256
0 commit comments