## TEST ## 'awk' PROGRAM NAME: feinp_nas2freeform_elinfo_awkprogTESTcrod_ctube ## ## in $FEDIR/scripts ## where FEDIR=/apps/nns_com/fea ## ######################################################################## ## PURPOSE: FOR TESTING OF REFORMATTING OF CROD/CTUBE RECORDS ## into a 'generic, free-format'. ## ## ** This script uses 'awk' to READ an MSC/NASTRAN input file and ## ** EXTRACT various ELEMENT records (CROD & CTUBE -- ## ** for test) into an output file. ## ## See the statements/section-starts like ## if ($0 ~ "^CHEXA" || $0 ~ "^chexa") ## in this awk program to see the supported elements --- and ## how the NASTRAN records are read and parsed. ## ## The input ELEMENT records can be in MSC ## - free-form format ## - short-field format ## or - long-field format (with continuation record). ## ## For each input ELEMENT record, a single 'free-form' record is written ## which is generally of the form ## elname eid pid g1 g2 g3 ... ## where elname is an element name like CTRIA3 ## eid = element-id (an integer) ## pid = property id, usually (an integer) ## gi's are ids of grid/node points (integers). ## ######################################################################## ## CALLED BY: TEST SCRIPT 'feinp_nas2stl_nogui_TESTawkprogs' ## in $FEDIR/scripts. ## To prepare for incorporation into ## 'feinp_nas2freeform_elinfo_awkprog' ## which is called in 'feinp_nas2stl_bygui' ## ## which is a "NASTRAN-to-STL" file creation utility. ## ## The 'generic' ELEMENT-info output file is used as input in ## 'feinp_nas2stl_bygui'. See that script for more info. ## ######################################################################## ## INPUT: NASTRAN input filename ## OUTPUT: stdout ######################################################################## ## TEST FILES: Test NASTRAN files with various elements are ## in directory /apps/nns_com/fea/demos_nas2stl. ## Some of these NASTRAN input files are from ## /apps/msc/msc70/msc70/nast/demo ## and /apps/msc/msc70/msc70/nast/tpl. ## Others may be from NNS NASTRAN users. ######################################################################## ## SUPPORTED ELEMENT RECORD TYPES BELOW: ## - CROD/CTUBE ######################################################################## ## MAINTENANCE HISTORY: ## Written by: B.Montandon O06 24Aug2000 'nasinp2freeform_elTESTcrod_ctube' ## test script+awkprog was created ## based on 'nasinp2stl_awkprog' ## and 'nasinp2stl_bygui' ## in $FEDIR/scripts ## Updated by: B.Montandon O06 13Sep2000 Extracted awkprog from ## 'nasinp2freeform_elTESTcrod_ctube' ## into this awkprog file. ######################################################################## ## SAMPLE INPUT FOR TESTING: ## $ 1 2 3 4 5 6 7 ## $ 345678901234567890123456789012345678901234567890123456789012345678901234567890 ## GRID ## $ ## $ 1 2 3 4 5 6 7 ## $ 345678901234567890123456789012345678901234567890123456789012345678901234567890 ## $ EID PID G1 G2 ## $ ## CROD,21,21,110,111 ## CROD 501 1 1 2 ## CROD* 501 1 1 2 ## CTUBE,29,29,112,113 ## CTUBE 1 1 1 2 ## CTUBE* 1 1 1 2 ## $ BEGIN { printf ("# ELEMENT RECS FROM NASTRAN INPUT %-65s\n",FILE_IN); printf ("# \n"); printf ("# For each input ELEMENT record,\n"); printf ("# a single *free-form* record is written, of the form\n"); printf ("# elname eid pid g1 g2 g3 ...\n"); printf ("# where elname = element name like CTRIA3\n"); printf ("# eid = element-id, integer\n"); printf ("# pid = property id (usually), integer\n"); printf ("# gi-s are ids of grid/node points, integers.\n"); printf ("# \n"); ## i is a GRID rec counter; j is an element rec counter. i=0; j=0; DEBUG=DE_BUG } { ############################################################################## ## *SKIP* THIS REC IF IT IS A *COMMENT* REC. ############################################################################## # if (substr($0,1,1)=="$") { next } COL1=substr($0,1,1) if (COL1=="$") { next } ############################################################################## ## *SKIP* THIS REC IF IT IS A *GRID* REC. ############################################################################## FIELD1=substr($0,1,8) FLD1CAPS=toupper(FIELD1) if (FLD1CAPS ~ "GRID") {i++; next} ############################################################################## ## DETERMINE THE RECORD FORMAT OF THE INCOMING REC. ############################################################################## RECfmt="free" IXCOMMA=index($0,",") if (IXCOMMA==0) RECfmt="short" if (RECfmt=="short") { IXSTAR=index(FIELD1,"*") if (IXSTAR!=0) RECfmt="long" } ## *FOR TESTING* -- show the just-captured RECfmt: if (DEBUG==1) { print "**************************************" print "DEBUG - nonGRID,nonCOMMENT RECORD READ:" print " Fmt="RECfmt" FIELD1="FIELD1" IXCOMMA="IXCOMMA" IXSTAR="IXSTAR print " Rec=" print $0 } ########################################################################### ## **CROD/CTUBE** RECORD PROCESSING LOGIC: ########################################################################### ## LOOK FOR *CROD* or *CTUBE* IN THE FIRST FIELD. ## INCREMENT THE ELEMENT-REC COUNT, j. ########################################################################### if ($0 ~ "^CROD" || $0 ~ "^crod" || \ $0 ~ "^CTUBE" || $0 ~ "^ctube") {j++ ####################################################### ## CROD/TUBE **FREE FORMAT** RECORD-PROCESSING SECTION ####################################################### ## 1) REPLACE ADJACENT COMMAS IN ELEMENT REC ## BY TWO COMMAS SEPARATED BY A DUMMY STRING --- ## 2) REPLACE EACH COMMA IN THE *FREE-FORMAT* ## ELEMENT REC BY A BLANK. ## 3) PRINT THE CHANGED *FREE-FORMAT* ELEMENT REC. ## SAMPLE: CROD,21,21,110,111 ## ASSUMPTION: ALL THE NEEDED DATA IS IN ONE REC. ####################################################### if (RECfmt=="free") { # gsub(/,,/,",0,") gsub(/,,/,",dummy,") gsub(/,/," ") print $0 ## *FOR TESTING* -- show the changed rec, to be written: if (DEBUG==1) { print "DEBUG - FREE-FORMAT REC WRITTEN. RECfmt="RECfmt" j="j } next } ######################################################### ## END OF CROD/TUBE **FREE RECORD FORMAT** WRITE SECTION ######################################################### ########################################################### ## CROD/TUBE **SHORT-FIELD-FORMAT** RECORD-PROCESSING SECTION ########################################################### ## 1) GET FIELDS 1,2,3,4,5 OF THE NASTRAN ## *SHORT-FIELD-FORMAT* CROD/TUBE REC. ## [THE 4th,5th FIELDS are 2 grid ids ] ## ## SAMPLE: ## $ 1 2 3 4 5 6 7 ## $2345678901234567890123456789012345678901234567890123456789012345678901234567890 ## $ EID PID G1 G2 ## CROD 501 1 1 2 ## ## 2) PRINT THE CAPTURED FIELDS, SPACE-SEPARATED, in one rec. ########################################################### if (RECfmt=="short") { f1=substr($0,1,8) f2=substr($0,9,8) if (f2==" ") f2="dummy" f3=substr($0,17,8) if (f3==" ") f3="dummy" f4=substr($0,25,8) if (f4==" ") f4="dummy" f5=substr($0,33,8) if (f5==" ") f5="dummy" printf ("%s %s %s %s %s\n",f1,f2,f3,f4,f5) ## *FOR TESTING* -- show the just-captured *CROD/TUBE* data: if (DEBUG==1) { print "DEBUG - SHORT FIELD REC WRITTEN. DECOMPOSITION:" print " Fmt="RECfmt" j=element-count="j print " f1=elname="f1" f2=elid="f2" f3=propid="f3 print " f4=g1="f4" f5=g2="f5 } next } ############################################################ ## END OF CROD/TUBE **SHORT-FIELD-FORMAT** WRITE SECTION ############################################################ ############################################################ ## CROD/TUBE **LONG-FIELD FORMAT** RECORD-PROCESSING SECTION ############################################################ ## 1) GET FIELDS 1,2,3,4,5 OF THE NASTRAN ## *LONG-FIELD-FORMAT* CROD/TUBE REC. ## [THE 4th,5th FIELDS are 2 grid ids ] ## ## SAMPLE: ## $ 1 2 3 4 5 6 7 ## $2345678901234567890123456789012345678901234567890123456789012345678901234567890 ## $ EID PID G1 G2 ## CROD* 501 1 1 2 ## ## 2) PRINT THE CAPTURED FIELDS, SPACE-SEPARATED, in one rec. ########################################################### if (RECfmt=="long") { f1=substr($0,1,8) f2=substr($0,9,16) if (f2==" ") f2="dummy" f3=substr($0,25,16) if (f3==" ") f3="dummy" f4=substr($0,41,16) if (f4==" ") f4="dummy" f5=substr($0,57,16) if (f5==" ") f5="dummy" printf ("%s %s %s %s %s\n",f1,f2,f3,f4,f5) ## *FOR TESTING* -- show the just-captured ELEMENT data: if (DEBUG==1) { print "DEBUG - LONG-FIELD REC WRITTEN. DECOMPOSITION:" print " Fmt="RECfmt" j=element-count="j print " f1=elname="f1" f2=elid="f2" f3=propid="f3 print " f4=g1="f4" f5=g2="f5 } next } ###################################################### ## END OF **LONG-FIELD RECORD FORMAT** WRITE SECTION ###################################################### } ######################################################################### ## END OF **CROD/TUBE** RECORD PROCESSING LOGIC. ######################################################################### } END { printf ("# Created via $FEDIR/scripts/nasinp2freeform_elinfo\n") printf ("# or via $HOME/Dscrtest/test_nasinp2freeform_crod_ctube\n") printf ("# Total number of GRID recs encountered: %12d\n",i) printf ("# Total number of ELEMENT recs put in this file: %12d\n",j) }