Skip to content

Commit

Permalink
Merge pull request #58 from MYSTRANsolver/continuation_pcomp_note
Browse files Browse the repository at this point in the history
continuation & stress note bug fix
  • Loading branch information
zchlrnr committed Apr 12, 2024
2 parents e5ff080 + bb3ef6c commit bdb1863
Show file tree
Hide file tree
Showing 4 changed files with 190 additions and 39 deletions.
84 changes: 84 additions & 0 deletions Build_Test_Cases/statics/cquad4_pcomp.bdf
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
ID PLATE,STATICS
SOL 1
CEND
TITLE = CQUAD4 test
ECHO = UNSORT
$
$DISP( PRINT,PLOT,PUNCH,NEU,CSV) = ALL
$ELFORCE( PRINT,PLOT,PUNCH,NEU,CSV) = ALL
$GPFORCE( PRINT,PLOT,PUNCH,NEU,CSV) = ALL
$MPCFORCE(PRINT,PLOT,PUNCH,NEU,CSV) = ALL
$OLOAD( PRINT,PLOT,PUNCH,NEU,CSV) = ALL
$SPCFORCE(PRINT,PLOT,PUNCH,NEU,CSV) = ALL
$STRESS( PRINT,PLOT,PUNCH,NEU,CSV) = ALL
$STRAIN( PRINT,PLOT,PUNCH,NEU,CSV) = ALL
$
$ current support
DISP( PRINT,PLOT,PUNCH) = ALL
ELFORCE( PRINT,PLOT,PUNCH) = ALL
GPFORCE( PRINT,PLOT) = ALL
MPCFORCE(PRINT,PLOT,PUNCH) = ALL
OLOAD( PRINT,PLOT,PUNCH) = ALL
SPCFORCE(PRINT,PLOT,PUNCH) = ALL
STRESS( PRINT,PLOT,PUNCH) = ALL
STRAIN( PRINT,PLOT,PUNCH) = ALL
SET 1 = 11
ELDATA(0,PRINT) = ALL
ELDATA(1,PRINT) = ALL
ELDATA(2,PRINT) = ALL
ELDATA(3,PRINT) = ALL
ELDATA(4,PRINT) = ALL
ELDATA(5,PRINT) = ALL
$
SPC = 101
SUBCASE 1
LABEL = FORCE load
LOAD = 1992
SUBCASE 2
LABEL = PLOAD2 load
LOAD = 1993
SUBCASE 3
LABEL = PLOAD4 load
LOAD = 1994
BEGIN BULK
$
GRID 1011 0. 0. 0. $ fixed
GRID 1012 50. 0. 0. $ fixed
GRID 1013 50. 50. 0. $ free
GRID 1014 0. 50. 0. $ free
$
CQUAD4 11 91 1011 1012 1013 1014
$
$
$ PCOMP PID Z0 NSM SB FT TREF GE LAM
$ MID1 T1 THETA1 SOUT1 MID2 T2 THETA2 SOUT2
$ MID3 T3 THETA3 SOUT3 ...
PCOMP, 91, , 0.1
, 20, 0.1, 0.0
, 20, 0.2, 0.0
, 20, 0.3, 0.0
$
$ mid E G NU RHO
MAT1 20 10.+6 4.+6 .25 .1 +MAT1
+MAT1 20000. 20000. 20000.
$
FORCE 1992 1011 1000. 1. 1. 0.
FORCE 1992 1012 1000. 1. 1. 0.
FORCE 1992 1013 1000. 1. 1. 0.
$
$PLOAD2 SID, P, EID1
PLOAD2, 1993, 1.1, 11
$
$PLOAD4 SID EID P1 P2 P3 P4
PLOAD4, 1994, 11, 1.1
$
SPC1, 101, 123456, 1011, 1012
$
PARAM SOLLIB IntMKL
PARAM GRDPNT 0
PARAM POST -1
$
DEBUG 192 2 GPFO summary
DEBUG 200 1 ANS
$
ENDDATA
22 changes: 22 additions & 0 deletions Build_Test_Cases/statics/missing_continuation.bdf
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
$pyNastran: version=mystran
SOL 101
CEND
SUBCASE 1
DISPLACEMENT(PLOT,PRINT) = ALL
LOAD = 1
SPC = 2
BEGIN BULK
$PARAM POST -1
GRID 1 0. 0. 0.
GRID 2 1. 0. 0.
$ 1 .. 2 .. 3 .. 4 .. 5 .. 6 .. 7 .. 8 .. 9 .. 10 .
$ pid mid A b c d e f g
CBAR 1 1 1 2 0. 1. 0. +C1
+C1 -0.5 0. 0. 0.5 0. 0.
PBARL 1 1 BAR
.1 .1 0.
MAT1 1 1.+11 0.
FORCE 1 2 1. 30000. 0. 0.
SPC 2 1 123456
DEBUG 178 1
ENDDATA
83 changes: 59 additions & 24 deletions Source/LK1/L1U/NEXTC.f90
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,9 @@

! End MIT license text.

SUBROUTINE NEXTC ( CARD, ICONT, IERR )

! Looks for a Bulk Data continuation card belonging to a parent card.
SUBROUTINE NEXTC ( CARD, ICONTINUE, IERR )

! Looks for a Bulk Data continuation card belonging to a parent card.
USE PENTIUM_II_KIND, ONLY : BYTE, LONG, DOUBLE
USE IOUNT1, ONLY : WRT_LOG, ERR, F04, F06, IN1, INFILE
USE SCONTR, ONLY : BD_ENTRY_LEN, BLNK_SUB_NAM, ECHO, FATAL_ERR, JCARD_LEN
Expand All @@ -41,13 +40,13 @@ SUBROUTINE NEXTC ( CARD, ICONT, IERR )
CHARACTER(LEN=LEN(BLNK_SUB_NAM)):: SUBR_NAME = 'NEXTC'
CHARACTER(LEN=*), INTENT(INOUT) :: CARD ! A MYSTRAN data card
CHARACTER(LEN=LEN(CARD)) :: CARD_IN ! Version of CARD read here
CHARACTER(LEN=JCARD_LEN) :: JCARD(10) ! 10 fields of 8 characters of CARD
CHARACTER(LEN=JCARD_LEN) :: JCARD(10), JCARD0(10) ! 10 fields of 8 characters of CARD
CHARACTER(24*BYTE) :: MESSAG ! Message for output error purposes
CHARACTER(LEN(JCARD)) :: NEWTAG ! Field 1 of cont card
CHARACTER(LEN(JCARD)) :: OLDTAG ! Field 10 of parent card
CHARACTER(LEN=LEN(CARD)) :: TCARD ! Temporary version of CARD

INTEGER(LONG), INTENT(OUT) :: ICONT ! =1 if next card is current card's continuation or =0 if not
INTEGER(LONG), INTENT(OUT) :: ICONTINUE ! =1 if next card is current card's continuation or =0 if not
INTEGER(LONG), INTENT(OUT) :: IERR ! Error indicator from subr FFIELD, called herein
INTEGER(LONG) :: COMMENT_COL ! Col on CARD where a comment begins (if one exists)
INTEGER(LONG) :: I ! DO loop index
Expand All @@ -64,25 +63,32 @@ SUBROUTINE NEXTC ( CARD, ICONT, IERR )
ENDIF

! **********************************************************************************************************************************
! Initialize error indicator and ICONT

IERR = 0
ICONT = 0

! Make units for writing errors the error file and output file
! Initialize error indicator and ICONTINUE
IERR = 0
ICONTINUE = 0

! Make units for writing errors the error file and output file
OUNT(1) = ERR
OUNT(2) = F06

! Make JCARD for parent CARD

! Make JCARD for parent CARD
! split the line (CARD) into fields (JCARD)
CALL MKJCARD ( SUBR_NAME, CARD, JCARD )

! copy jcard to jcard0 in case we have an error
DO I=1,10
JCARD0(I) = JCARD(I)
ENDDO

! Read next card.
!------------------------
! Read next card.

OLDTAG = JCARD(10) ! OLDTAG is field 10 of the current card coming into this subr
! OLDTAG is field 10 of the current card coming into this subr
OLDTAG = JCARD(10)
MESSAG = 'BULK DATA CARD '
READ(IN1,101,IOSTAT=IOCHK) TCARD ! Read next card

! Read next card
READ(IN1,101,IOSTAT=IOCHK) TCARD
CARD_IN = TCARD
IF (IOCHK /= 0) THEN
REC_NO = -99
Expand All @@ -106,8 +112,8 @@ SUBROUTINE NEXTC ( CARD, ICONT, IERR )
ENDIF
ENDDO

! Remove any comments within the CARD by deleting everything from $ on (after col 1)

! Remove any comments within the CARD by deleting everything
! from $ on (after col 1)
COMMENT_COL = 1
DO I=2,BD_ENTRY_LEN
IF (TCARD(I:I) == '$') THEN
Expand All @@ -120,27 +126,49 @@ SUBROUTINE NEXTC ( CARD, ICONT, IERR )
TCARD(COMMENT_COL:) = ' '
ENDIF

! Make JCARD for TCARD above and get FFIELD to left adjust and fix-field it (if necessary).

! Make JCARD for TCARD above and get FFIELD to left adjust and
! fix-field it (if necessary).
!
! get a flag (ICONTINUE) that defines if we need to read the next line
! we do because we have OLDTAG
IF (TCARD(1:1) /= '$') THEN
CALL FFIELD ( TCARD, IERR )

! split the continuation line (TCARD) into fields (JCARD)
CALL MKJCARD ( SUBR_NAME, TCARD, JCARD )
NEWTAG = JCARD(1)
IF (NEWTAG == OLDTAG) THEN
ICONT = 1
ICONTINUE = 1
ELSE IF ((OLDTAG(1:1) == '+') .AND. (NEWTAG(1:1) == ' ') .AND. (OLDTAG(2:8) == NEWTAG(2:8))) THEN
ICONT = 1
ICONTINUE = 1
ELSE IF ((OLDTAG(1:1) == ' ') .AND. (NEWTAG(1:1) == '+') .AND. (OLDTAG(2:8) == NEWTAG(2:8))) THEN
ICONT = 1
ICONTINUE = 1
ELSE
! can\t find the continuation marker. FATAL :)
BACKSPACE(IN1)
WRITE(F06,102) OLDTAG
WRITE(ERR,102) OLDTAG
WRITE(F06,103)
WRITE(ERR,103)
WRITE(F06,104) 'FIELDS1:', JCARD0
WRITE(ERR,104) 'FIELDS1:', JCARD0
WRITE(F06,104) 'FIELDS2:', JCARD
WRITE(ERR,104) 'FIELDS2:', JCARD
FLUSH(F06)
FLUSH(ERR)
FATAL_ERR = FATAL_ERR + 1
CALL OUTA_HERE('Y') ! FATAL error
RETURN
ENDIF
ENDIF
!WRITE(ERR,*) 'OLDTAG="', OLDTAG, '"'
!WRITE(ERR,*) 'NEWTAG="', NEWTAG, '"'
!WRITE(ERR,*) 'ICONTINUE=', ICONTINUE
CARD = TCARD
IF (ECHO(1:4) /= 'NONE') THEN
WRITE(F06,'(A)') CARD_IN
ENDIF
ELSE
! comment line
BACKSPACE(IN1)
ENDIF

Expand All @@ -156,6 +184,13 @@ SUBROUTINE NEXTC ( CARD, ICONT, IERR )
! **********************************************************************************************************************************
101 FORMAT(A)

! missing continuation fatal
102 FORMAT(' *FATAL: COULD NOT FIND A CONTINUATION MARKER FOR ', A)
103 FORMAT(' CHECK THAT THE CONTINUATION STARTS AT THE BEGINNING OF FIELD 10')

! missing continuation; name and 10 fields
104 FORMAT(' ', A, ' 1: ', A, ' 2:', A, ' 3:', A, ' 4:', A, &
' 5:', A, ' 6:', A, ' 7:', A, ' 8:', A, ' 9:', A, ' 10:', A)
! **********************************************************************************************************************************

END SUBROUTINE NEXTC
Loading

0 comments on commit bdb1863

Please sign in to comment.