Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 22 additions & 5 deletions Source/EMG/EMG1/ELEMENT_DATA_GATHERING.f03
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ SUBROUTINE ELMDAT1 ( INT_ELEM_ID, WRITE_WARN )
CHARACTER(LEN=*), INTENT(IN) :: WRITE_WARN ! If 'Y' write warning messages, otherwise do not
CHARACTER( 1*BYTE) :: GET_VVEC ! If 'Y' run code to get VVEC
CHARACTER( 1*BYTE) :: VVEC_DEFINED ! If 'Y' then a VVEC was found for elements that require one
LOGICAL :: HEXA8_BUBBLE ! HEXA8 with IN = BUBBLE (not blank): always the enhanced element

INTEGER(LONG), INTENT(IN) :: INT_ELEM_ID ! Internal element ID
INTEGER(LONG) :: ACID ! Actual coord sys ID
Expand Down Expand Up @@ -503,15 +504,27 @@ SUBROUTINE ELMDAT1 ( INT_ELEM_ID, WRITE_WARN )
ENDDO
ENDIF

! Set default integration order if IN = blank
! Set default integration order if IN = blank. For HEXA8, ISOLID(4) = 0 (IN = BUBBLE) selects the enhanced assumed strain element
! with 2x2x2 integration (see subr HEXA), which is the counterpart of the Nastran bubble-function CHEXA8. IN = blank selects it
! too, unless ISOP = FULL (resolved after ISOP below). As in Nastran, IN = TWO or THREE selects the reduced shear (ISOP blank or
! REDUCED) or the standard isoparametric (ISOP = FULL) element with that integration order. IN = BUBBLE is an explicit request for
! the enhanced element, so it selects it whatever ISOP says (Nastran defines BUBBLE only with ISOP blank or REDUCED).

IF (ISOLID(4) == -1) THEN
HEXA8_BUBBLE = (TYPE == 'HEXA8') .AND. (ISOLID(4) == 0)

IF (TYPE == 'HEXA8' ) THEN
WRITE(ERR,1964) TYPE
WRITE(F06,1964) TYPE
IF ((TYPE == 'HEXA20') .OR. (TYPE(1:5) == 'PENTA') .OR. (TYPE(1:5) == 'TETRA')) THEN
IF (ISOLID(4) == 0) THEN ! IN = BUBBLE is only meaningful for HEXA8
WRITE(ERR,1965) "IN","BUBBLE",TYPE
WRITE(F06,1965) "IN","BUBBLE",TYPE
NUM_EMG_FATAL_ERRS = NUM_EMG_FATAL_ERRS + 1
FATAL_ERR = FATAL_ERR + 1
ENDIF
ENDIF

IF (ISOLID(4) == -1) THEN

IF (TYPE == 'HEXA8' ) THEN
ISOLID(4) = 0
ELSE IF (TYPE == 'HEXA20' ) THEN
ISOLID(4) = 3
ELSE IF (TYPE == 'PENTA6' ) THEN
Expand Down Expand Up @@ -601,6 +614,10 @@ SUBROUTINE ELMDAT1 ( INT_ELEM_ID, WRITE_WARN )

END IF

IF ((TYPE == 'HEXA8') .AND. (ISOLID(4) == 0) .AND. (.NOT. HEXA8_BUBBLE) .AND. (ISOLID(6) == 1)) THEN
ISOLID(4) = 2 ! IN = blank, ISOP = FULL: standard isoparametric element, 2x2x2
ENDIF


! **********************************************************************************************************************************
! Generate EMAT matl props for this elem. Shell elems with PCOMP_PROPS are handled in subr SHELL_ABD_MATRICES.
Expand Down
11 changes: 9 additions & 2 deletions Source/EMG/EMG1/EMG.f03
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ SUBROUTINE EMG ( INT_ELEM_ID, OPT, WRITE_WARN, CALLING_SUBR, WRT_BUG_THIS_TIME )
CHARACTER( 2*BYTE) :: LOC ! Location where THETAM is calculated (for DEBUG output purposes)
CHARACTER( 1*BYTE) :: FIX_EDAT = 'N'! If 'Y', run code to change order of grids in EDAT for 3D elems
CHARACTER( 1*BYTE) :: RED_INT_SHEAR = 'N'! If 'Y', use Gaussian weighted average of B matrices for shear terms
CHARACTER( 1*BYTE) :: BUBBLE = 'N'! If 'Y', HEXA8 bubble element (enhanced assumed strain)

INTEGER(LONG), INTENT(IN) :: INT_ELEM_ID ! Internal element ID for which
INTEGER(LONG) :: CASE_NUM = 0 ! Can be subcase number (e.g. for UEL, PEL outout)
Expand Down Expand Up @@ -394,8 +395,14 @@ SUBROUTINE EMG ( INT_ELEM_ID, OPT, WRITE_WARN, CALLING_SUBR, WRT_BUG_THIS_TIME )
ENDIF

IF ((TYPE == 'HEXA8 ') .OR. (TYPE == 'HEXA20 ')) THEN
INT_ORDER = ISOLID(4) ! Integration order
CALL HEXA ( OPT, INT_ELEM_ID, INT_ORDER, RED_INT_SHEAR, WRITE_WARN )
IF (ISOLID(4) == 0) THEN ! IN = BUBBLE (HEXA8 only), integrated with 2x2x2 points
INT_ORDER = 2
BUBBLE = 'Y'
ELSE
INT_ORDER = ISOLID(4) ! Integration order
BUBBLE = 'N'
ENDIF
CALL HEXA ( OPT, INT_ELEM_ID, INT_ORDER, RED_INT_SHEAR, BUBBLE, WRITE_WARN )
ELSE IF ((TYPE == 'PENTA6 ') .OR. (TYPE == 'PENTA15 ')) THEN
IF (ISOLID(4) == 2) THEN ! Integration order
IORD_K = 2
Expand Down
Loading
Loading