Skip to content

Commit 9aeff21

Browse files
authored
Merge pull request #144 from victorkemp/mitc8
Mitc8 basic stiffness
2 parents e60964f + f334c5d commit 9aeff21

49 files changed

Lines changed: 3086 additions & 104 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Source/EMG/EMG1/ELMDAT1.f90

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ SUBROUTINE ELMDAT1 ( INT_ELEM_ID, WRITE_WARN )
4242
MRPBAR, MRPBEAM, MRPBUSH, MRPELAS, MRPROD, MRPSHEAR, MRPUSER1, MPSOLID, BLNK_SUB_NAM, &
4343
NCORD, NGRID
4444
USE SCONTR, ONLY : DEDAT_Q4_MATANG_KEY, DEDAT_Q4_THICK_KEY, DEDAT_Q4_POFFS_KEY, &
45-
DEDAT_T3_MATANG_KEY, DEDAT_T3_THICK_KEY, DEDAT_T3_POFFS_KEY
45+
DEDAT_T3_MATANG_KEY, DEDAT_T3_THICK_KEY, DEDAT_T3_POFFS_KEY, &
46+
DEDAT_Q8_THICK_KEY, DEDAT_Q8_POFFS_KEY
4647
USE PARAMS, ONLY : EPSIL, TSTM_DEF
4748
USE TIMDAT, ONLY : TSEC
4849
USE SUBR_BEGEND_LEVELS, ONLY : ELMDAT_BEGEND
@@ -145,7 +146,7 @@ SUBROUTINE ELMDAT1 ( INT_ELEM_ID, WRITE_WARN )
145146

146147
! *** NOTE: CHECK CODE FOR 3D ELEMS IF THEY ARE TO HAVE OFFSET. GRID ORDER MAY GET CHANGED IN SUBR EDAT_FIXUP (SEE EMG)
147148
IF ((TYPE == 'BAR ') .OR. (TYPE == 'BEAM ') .OR. (TYPE == 'BUSH ') .OR. (TYPE(1:5) == 'TRIA3' ) .OR. &
148-
(TYPE(1:5) == 'QUAD4' )) THEN
149+
(TYPE(1:5) == 'QUAD4' ) .OR. (TYPE(1:5) == 'QUAD8' )) THEN
149150
CAN_ELEM_TYPE_OFFSET = 'Y'
150151
ELSE
151152
CAN_ELEM_TYPE_OFFSET = 'N'
@@ -373,7 +374,8 @@ SUBROUTINE ELMDAT1 ( INT_ELEM_ID, WRITE_WARN )
373374
EPROP(I) = RPSHEAR(INTL_PID,I)
374375
ENDDO
375376

376-
ELSE IF ((TYPE(1:5) == 'TRIA3') .OR. (TYPE(1:5) == 'QUAD4')) THEN
377+
ELSE IF ((TYPE(1:5) == 'TRIA3') .OR. (TYPE(1:5) == 'QUAD4') .OR. (TYPE(1:5) == 'QUAD8')) THEN
378+
377379
! For elems that not composites do EPROP in subr SHELL_ABD_MATRICES)
378380
IF (PCOMP_PROPS == 'N') THEN ! Shell properties are in array PSHELL (except maybe membrane thickness)
379381

@@ -392,8 +394,10 @@ SUBROUTINE ELMDAT1 ( INT_ELEM_ID, WRITE_WARN )
392394
THICK_AVG = ZERO ! DELTA locates where thickness key is in EDAT (rel to EID) for plates
393395
IF (TYPE(1:5) == 'QUAD4') THEN
394396
DELTA = DEDAT_Q4_THICK_KEY
395-
ELSE
397+
ELSE IF (TYPE(1:5) == 'TRIA3') THEN
396398
DELTA = DEDAT_T3_THICK_KEY
399+
ELSE IF (TYPE(1:5) == 'QUAD8') THEN
400+
DELTA = DEDAT_Q8_THICK_KEY
397401
ENDIF
398402

399403
IF (EDAT(EPNTK+DELTA) > 0) THEN ! Membrane thickness was defined as grid thicknesses on connection entry
@@ -555,10 +559,9 @@ SUBROUTINE ELMDAT1 ( INT_ELEM_ID, WRITE_WARN )
555559
ENDIF
556560
NUMMAT = 1
557561

558-
ELSE IF ((TYPE(1:5) == 'TRIA3') .OR. (TYPE(1:5) == 'QUAD4')) THEN
562+
ELSE IF ((TYPE(1:5) == 'TRIA3') .OR. (TYPE(1:5) == 'QUAD4') .OR. (TYPE(1:5) == 'QUAD8')) THEN
559563
! For elems that are not composites do EMAT in subr SHELL_ABD_MATRICES)
560564
IF (PCOMP_PROPS == 'N') THEN
561-
562565
INTL_MID(1) = PSHEL(INTL_PID,2)
563566
IF (INTL_MID(1) /= 0) THEN
564567
MTRL_TYPE(1) = MATL(INTL_MID(1),2)
@@ -820,6 +823,23 @@ SUBROUTINE ELMDAT1 ( INT_ELEM_ID, WRITE_WARN )
820823
ZOFFS = ZERO
821824
ENDIF
822825

826+
ELSE IF (TYPE(1:5) == 'QUAD8') THEN
827+
828+
IROW = EDAT(EPNTK + DEDAT_Q8_POFFS_KEY)
829+
IF (IROW > 0) THEN ! Elem has offset. IROW > 0 is the row in PLATEOFF where ZOFFS is
830+
EOFF(INT_ELEM_ID) = 'Y'
831+
ZOFFS = PLATEOFF(IROW)
832+
IF (DABS(ZOFFS) > 0.D0) THEN ! Offset not yet allowed on quad8
833+
WRITE(ERR,*) ' *ERROR : OFFSET CANNOT BE USED FOR CQUAD8'
834+
WRITE(F06,*) ' *ERROR : OFFSET CANNOT BE USED FOR CQUAD8'
835+
NUM_EMG_FATAL_ERRS = NUM_EMG_FATAL_ERRS + 1
836+
FATAL_ERR = FATAL_ERR + 1
837+
ENDIF
838+
ELSE
839+
EOFF(INT_ELEM_ID) = 'N'
840+
ZOFFS = ZERO
841+
ENDIF
842+
823843
ENDIF
824844

825845
! Determine which grids have finite offsets for this element

Source/EMG/EMG1/EMG.f90

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,14 +102,14 @@ SUBROUTINE EMG ( INT_ELEM_ID, OPT, WRITE_WARN, CALLING_SUBR, WRT_BUG_THIS_TIME )
102102

103103
! **********************************************************************************************************************************
104104
! Call ELMDAT1 subr to get some of the data needed for this elem.
105-
105+
106106
IF ((TYPE == 'ELAS1 ') .OR. (TYPE == 'ELAS2 ') .OR. (TYPE == 'ELAS3 ') .OR. (TYPE == 'ELAS4 ') .OR. &
107107
(TYPE == 'ROD ') .OR. (TYPE == 'BAR ') .OR. (TYPE == 'BEAM ') .OR. (TYPE == 'BUSH ') .OR. &
108108
(TYPE == 'HEXA8 ') .OR. (TYPE == 'HEXA20 ') .OR. &
109109
(TYPE == 'PENTA6 ') .OR. (TYPE == 'PENTA15 ') .OR. &
110110
(TYPE == 'TETRA4 ') .OR. (TYPE == 'TETRA10 ') .OR. &
111111
(TYPE == 'USER1 ') .OR. (TYPE == 'USERIN ') .OR. (TYPE == 'PLOTEL ') .OR. &
112-
(TYPE == 'SHEAR ') .OR. (TYPE(1:5) == 'TRIA3') .OR. (TYPE(1:5) == 'QUAD4' )) THEN
112+
(TYPE == 'SHEAR ') .OR. (TYPE(1:5) == 'TRIA3') .OR. (TYPE(1:5) == 'QUAD4' ) .OR. (TYPE(1:5) == 'QUAD8' )) THEN
113113
CALL ELMDAT1 ( INT_ELEM_ID, WRITE_WARN )
114114
ELSE
115115
WRITE(ERR,1916) SUBR_NAME,EID,TYPE
@@ -155,6 +155,9 @@ SUBROUTINE EMG ( INT_ELEM_ID, OPT, WRITE_WARN, CALLING_SUBR, WRT_BUG_THIS_TIME )
155155
ELSE IF ((TYPE(1:5) == 'QUAD4') .OR. (TYPE == 'SHEAR ')) THEN
156156
CALL ELMGM2 ( WRITE_WARN )
157157

158+
ELSE IF (TYPE(1:5) == 'QUAD8') THEN
159+
TE_IDENT = 'Y' ! Stiffness matrix is calculated in basic coordinates so no transformation.
160+
158161
ELSE IF ((TYPE == 'HEXA8 ') .OR. (TYPE == 'HEXA20 ')) THEN
159162
CALL ELMGM3 ( WRITE_WARN )
160163
FIX_EDAT = 'N'
@@ -187,7 +190,6 @@ SUBROUTINE EMG ( INT_ELEM_ID, OPT, WRITE_WARN, CALLING_SUBR, WRT_BUG_THIS_TIME )
187190
! --------
188191

189192
IF ((TYPE(1:5) == 'TRIA3') .OR. (TYPE(1:5) == 'QUAD4') .OR. (TYPE == 'SHEAR ')) THEN
190-
191193
IF (PCOMP_PROPS == 'N') THEN ! SHEAR elem does not use PCOMP props
192194

193195
THETAM = ZERO
@@ -271,6 +273,15 @@ SUBROUTINE EMG ( INT_ELEM_ID, OPT, WRITE_WARN, CALLING_SUBR, WRT_BUG_THIS_TIME )
271273

272274
ENDIF
273275

276+
IF (TYPE == 'QUAD8 ') THEN
277+
! Victor todo sort out THETAM like above for the regular shells once I've worked out the coordinate systems.
278+
279+
CALL MATERIAL_PROPS_2D ( WRITE_WARN )
280+
! Don't transform the material properties here because the transformation is different at each point in the element.
281+
282+
283+
ENDIF
284+
274285
IF ((TYPE == 'HEXA8 ') .OR. (TYPE == 'HEXA20 ') .OR. &
275286
(TYPE == 'PENTA6 ') .OR. (TYPE == 'PENTA15 ') .OR. &
276287
(TYPE == 'TETRA4 ') .OR. (TYPE == 'TETRA10 ')) THEN
@@ -321,7 +332,7 @@ SUBROUTINE EMG ( INT_ELEM_ID, OPT, WRITE_WARN, CALLING_SUBR, WRT_BUG_THIS_TIME )
321332
(TYPE == 'TETRA4 ') .OR. (TYPE == 'TETRA10 ')) THEN
322333
CALL ELMDAT2 ( INT_ELEM_ID, OPT, WRITE_WARN )
323334
ENDIF
324-
335+
325336
IF (NUM_EMG_FATAL_ERRS > 0) CALL EMG_QUIT
326337

327338
! **********************************************************************************************************************************
@@ -347,6 +358,10 @@ SUBROUTINE EMG ( INT_ELEM_ID, OPT, WRITE_WARN, CALLING_SUBR, WRT_BUG_THIS_TIME )
347358
CALL QDEL1 ( OPT, INT_ELEM_ID, WRITE_WARN )
348359
IF (NUM_EMG_FATAL_ERRS > 0) CALL EMG_QUIT
349360

361+
ELSE IF (TYPE(1:5) == 'QUAD8') THEN
362+
CALL MITC8 ( OPT, INT_ELEM_ID )
363+
IF (NUM_EMG_FATAL_ERRS > 0) CALL EMG_QUIT
364+
350365
ELSE IF ((TYPE == 'HEXA8 ') .OR. (TYPE == 'HEXA20 ') .OR. &
351366
(TYPE == 'PENTA6 ') .OR. (TYPE == 'PENTA15 ') .OR. &
352367
(TYPE == 'TETRA4 ') .OR. (TYPE == 'TETRA10 ')) THEN

0 commit comments

Comments
 (0)