$ $ THIS ALTER IS CONFIDENTIAL AND A TRADE SECRET OF THE $ MACNEAL-SCHWENDLER CORP. THE RECEIPT OR POSSESSION OF $ THIS ALTER DOES NOT CONVEY ANY RIGHTS TO REPRODUCE OR $ DISCLOSE ITS CONTENTS, OR TO MANUFACTURE, USE, OR SELL $ ANYTHING HEREIN, IN WHOLE OR IN PART, WITHOUT THE $ SPECIFIC WRITTEN CONSENT OF THE MACNEAL-SCHWENDLER CORPORATION. $ $ $ $ alter9ga.v707 $ updated 1/4/00 - tlr - corrected data recovery for frequency response $ $ alter9ga.v70 $ updated June, 1997 for V70 $ echooff $ $ alter9g.v682 $ $ updated 4/17/95 to include MPC force output $ $ updated 2/22/1995 - added interface force plots and summary $ $ updated to v68 - 4/1993 - added DRMH3 and xyplot for OTM $ $ ------ SUPERELEMENT BOUNDARY LOADS ALTER FOR DYNAMIC ANALYSES -------- $ ---------------------------------------------------------------------- $ DMAP TO CALCULATE SE BOUNDARY LOADS (J. SWAN 11/1991) $ MODIFIED TO USE OTM MATRICES (T. ROSE 4/1992) $ $ FOR MSC/NASTRAN V68 $ $ ALTER WILL CALCULATE INTERFACE BOUNDARY LOADS FOR SPECIFIED $ SUPERELEMENTS BASED ON THE FOLLOWING EQUATION: $ $ {F} = [MAA]*{ACCEL} + [BAA]*{VEL} + [KAA]*{DISP} $ $ WHERE ACCEL, VEL, AND DISP ARE THE SUPERELEMENT A-SET (BOUNDARY) $ RESPONSES AS CALCULATED IN A LINEAR TRANSIENT OR FREQUENCY RESPONSE $ SOLUTION. {F} WILL BE A FORCE TIME-HISTORY OR FREQUENCY RESPONSE $ OF THE INTERFACE LOADS APPLIED TO THE UPSTREAM SUPERELEMENT FROM $ THE DOWNSTREAM SUPERELEMENT. OUTPUT CAN BE PRINTED AND/OR PUNCHED $ SORT-2 OLOAD-STYLE OUTPUT, OR DMI/DMIG CARDS CAN BE PUT ON THE $ PUNCH FILE. $ $ USER REQUIREMENTS: $ 1) INCLUDE THIS ALTER WHICH IS ADDED TO SUBDMAP SUPER3, $ VERSION 67 OF MSC/NASTRAN. NOTE THAT A SEPARATE SUBDMAP $ NAMED TFVECTOR IS INCLUDED IN THIS ALTER PACKAGE. $ 2) PARAM, SEBFORCE MUST APPEAR IN EACH SUPERELEMENT SUBCASE WHERE $ BOUNDARY FORCES ARE TO BE CALCULATED. SET PARAM, SEBFORCE TO 1 $ FOR PRINTED AND/OR PUNCHED OUTPUT (SEE ITEM 3) ONLY, TO 2 FOR $ ADDITIONAL OUTPUT IN DMIG FORMAT IN THE PUNCH FILE, AND TO 3 $ FOR PUNCHED DMI CARDS OF THE TIME STEPS/FREQUENCY LIST (SEE $ ITEM 4). $ 3) FOR PRINTED AND/OR PUNCHED OUTPUT, USE OLOAD CASE CONTROL $ COMMANDS (E.G. OLOAD(PRINT,PUNCH)=SET_NO). USE OF A SET TO $ LIMIT OUTPUT TO BOUNDARY GRIDS/SCALARS IS RECOMMENDED TO $ AVOID SUPERFLUOUS OUTPUT. $ 4) DMIG OUTPUT CONTAIN LOADINGS AT GRIDS/DOFS, BUT NO $ LISTING OF THE TIME STEPS/FREQUENCIES OF THESE LOADS. IF $ SEBFORCE IS SET TO 3, THEN A DMI MATRIX OF THE TIME STEPS/ $ OUTPUT FREQUENCIES WILL BE PUNCHED AS WELL. THIS ONLY NEEDS $ TO BE DONE ONCE PER RUN. $ ---------------------------------------------------------------------- $ $ remove restart logic for superelements stored by the alters $ compile phase0 $ alter 'restart.*tlist'(,-1) type parm,,i,n,isitthr=0,pres2=0 $ call dbmgr //11/seid/0/0/s,isitthr/s,pres2/'stored'/'kaat '/ ' '/' '/' ' $ $message //'isitthr='/isitthr/' pres2 ='/pres2 $ $dbdict datablk=zuzr11, select=(name,vers,zname,zuzr1,zuzr2,zuzr3) $ if(isitthr=0)then $ $ alter 'restart.*tlist' endif $ $ $ try to outwit re-processing for stored superelements $ compile sekmr alter 'if.*noktt'(,-1) type parm,,i,n,isitthr=0,pres2=0 $ call dbmgr //11/seid/0/0/s,isitthr/s,pres2/'stored'/'kaat '/ ' '/' '/' ' $ $message //'isitthr='/isitthr/' pres2 ='/pres2 $ if(isitthr<0)noktt=0 $ $ alter 'if.*nomqq'(,-1) if(isitthr<0)nomqq=0 $ $ compile phase1a alter 'call.*semg'(,-1) type parm,,i,n,isitthr=0,pres2=0 $ call dbmgr //11/seid/0/0/s,isitthr/s,pres2/'stored'/'kaat '/ ' '/' '/' ' $ $message //'isitthr='/isitthr/' pres2 ='/pres2 $ if(isitthr=0)then $ $ alter 'call.*semg' else $ message //' ' $ message //'semg skipped for this superelement' $ message //' ' $ endif $ $ ---------------------------------------------------------------------- $ compile semtran $ alter 1 $ putsys(0,192) $ type db uset $ $ $alter 'dpd.*dynamics'(,-1) $ $type parm,,i,n,gotit=0 $ $call dbfetch /uset,,,,/0/0/0/0/s,gotit $ $message //' gotit = '/gotit $ $ compile phase1b $ $alter 'call.*pmluset.*uset'(,-1) $ $type parm,,i,n,storit=0,gotit $ $tabpt uset// $ $ $ the following dbstore generates a large f04 and f06 file - jml $ $putsys(1,109) $ $CALL DBSTORE uset,,,,//0/0/' '/0 $ $putsys(0,109) $ $message //' storit = '/storit $ $ COMPILE SUPER3 $ $ ALTER 213 $ 203(t1) $ AFTER CALL TO SEDRCVR $alter 232 $ after "IF ( STATICS OR APP='REIG' OR APP='NLST' ....." alter 'if.*statics.*or.*app.*reig.*or.*app.*nlst' $ $ $ SKIP OVER THIS IF RESIDUAL, OR PARAM, SEBFORCE IS NOT SET $ TYPE,PARM,,I,Y,(SEBFORCE=-1) TYPE,PARM,,I,N,CASECHEK $ $ IF DATABLOCK CASES WITH SEID > 0 AND PEID=0 CAN BE FOUND, THEN USE IT $ TO UPDATE PVT - INDICATES CURRENT SUPERELEMENT IS AN EXTERNAL. $ OTHERWISE CASES WITH PEID=SEID FROM DBLOCATED DB WOULD PREVAIL. DBVIEW CASESUB=CASES (WHERE SEID=SEID AND PEID=0 AND WILDCARD=TRUE) IF(CASECHEK=0) PVT PVTS,CASESUB/PVTEMP/ $ $ TYPE PARM,,I,N,GARBAGE $ CALL DBFETCH /TABDIS1,TABSPCF1,TABSTR1,TABFOR1,/SEID/0/0/0/S,GARBAGE $ GET OTM CALL DBFETCH /DIS,STRESS,FORC,SPCF,/SEID/0/0/0/S,GARBAGE $ GET OTM CALL DBFETCH /mpcf,tabmpcf1,,,/SEID/0/0/0/S,GARBAGE $ GET OTM $ TYPE PARM,,I,N,EXISTS=1 $ PARAML DIS//'PRESENCE'////S,N,EXISTS $ IF (EXISTS<>-1)JUMP DOIT $ PARAML STRESS//'PRESENCE'////S,N,EXISTS $ IF (EXISTS<>-1)JUMP DOIT $ PARAML FORC//'PRESENCE'////S,N,EXISTS $ IF (EXISTS<>-1)JUMP DOIT $ PARAML SPCF//'PRESENCE'////S,N,EXISTS $ IF (EXISTS<>-1)JUMP DOIT $ PARAML MPCF//'PRESENCE'////S,N,EXISTS $ IF (EXISTS<>-1)JUMP DOIT $ $ message //' ' $ message //'no otm exist for current superelement' $ message //' ' $ $ IF ((SEBFORCE <= 0) OR (SEID <= 0)) JUMP THEEND $ LABEL DOIT $ $ TYPE DB,MAA,BAA,KAA,KLAA,MLAA $ NECESSARY PERMANENT DATABLOCKS TYPE PARM,NDDL,I,Y,DDRMM $ NECESSARY NDDL PARAMETER $ $ LOCAL PARAMS TYPE,PARM,,I,N,NUMCOLZ,UCHEK,KCHEK,MCHEK,BCHEK,ASIZE,TFCHEK TYPE,PARM,,RS,N,REALSCAL,IMAGSCAL TYPE,PARM,,CS,N,SCALER IF (EXISTS<>-1) THEN $ $ MESSAGE //' ' $ MESSAGE //' ' $ MESSAGE //' +----------------------------------+' $ MESSAGE //' | OTM MATRICES EXIST FOR #' $ MESSAGE //' | SUPERELEMENT '/SEID/ ' #' $ MESSAGE //' +-=================================#' $ MESSAGE //' ' $ MESSAGE //' ' $ ENDIF $ $ IF (SEBFORCE>0) THEN $ MESSAGE //' ' $ MESSAGE //' ' $ MESSAGE //' +----------------------------------+' $ MESSAGE //' | BOUNDARY LOAD CALCULATIONS FOR #' $ MESSAGE //' | SUPERELEMENT '/SEID/ ' #' $ MESSAGE //' +-=================================#' $ MESSAGE //' ' $ MESSAGE //' ' $ ENDIF $ $ $ MAKE SURE S.E. BOUNDARY MOTION DATABLOCK IS THERE $ PARAML ULS//'PRESENCE'////S,N,UCHEK $ IF (UCHEK = -1) THEN $ BOUNDARY MOTION DATABLOCK NOT FOUND MESSAGE //'*** SYSTEM SEMI-FATAL MESSAGE: BOUNDARY DISPLACEMENT '/ 'DATABLOCK ULS FOR S.E.'/SEID/' NOT FOUND' $ MESSAGE //' SUPERELEMENT BOUNDARY LOADS ROUTINE CANNOT CONTINUE' $ JUMP THEEND $ PUNT REST OF ALTER ENDIF $ CONTINUE IF BOUNDARY MOTION DATABLOCK FOUND $ $ ---------------------------------- OBTAIN A-SET BOUNDARY MOTION MATRIX $ FOR DIRECT APPROACHES, OR IF DDRMM IS SET TO -1, THEN DATABLOCK ULS $ WILL BE THE BOUNDARY SOLUTION MATRIX. FOR MODAL APPROACHES WITH THE $ DEFAULT MATRIX METHOD OF DATA RECOVERY, ULS IS JUST THE MODE SHAPE $ MATRIX FOR THE BOUNDARY DOF. IN THAT CASE, IT MUST BE MULTIPLIED BY $ THE UH1 MODAL RESPONSE DATABLOCK. (FOR V66A/B, ULS IS NAMED ULVS, AND $ UH1 IS NAMED UHVF). WITH THE MATRIX METHOD THE TIME/FREQUENCY OUTPUT $ LIST DATABLOCK FOR SDR2 IS NAMED OL1 (OLBM FOR V66A/B), OTHERWISE $ USE DATABLOCK OLB2 (OLB1 FOR V66A/B) $ Ted: for v69, it is OL1S IF ((APP1 = 'MMREIG') AND (DDRMM >= 0)) THEN $ MATRIX METHOD USED PARAML UH1//'PRESENCE'////S,N,UCHEK $ IF(UCHEK = -1) THEN $ MESSAGE //'*** SYSTEM SEMI-FATAL MESSAGE: MODAL RESPONSE '/ 'DATABLOCK UH1 FOR S.E.'/SEID/' NOT FOUND ' $ MESSAGE //' SUPERELEMENT BOUNDARY LOADS ROUTINE CANNOT CONTINUE' $ JUMP THEEND $ PUNT ENDIF $ MPYAD ULS,UH1,/ASETDISP $ MODAL DISP * MODAL RESPONSE EQUIVX OL1r/OUTPLIST/ALWAYS $ OUTPUT LIST $ tabpt outplist// $ zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz ELSE $ OTHERWISE, DDRMM=-1 OR DIRECT METHOD USED, SO EQUIVX ULS/ASETDISP/ALWAYS $ EQUIVX OL1S/OUTPLIST/ALWAYS $ OUTPUT LIST ENDIF $ $ $ MATRIX ASETDISP CONTAINS THE BOUNDARY MOTION FOR THE SUPERELEMENT. $ IF THIS IS A TRANSIENT RESPONSE, THAT WILL BE TRIPLETS OF DISP/ $ VELO/ACCE COLUMN VECTORS FOR EACH TIME STEP. IF A FREQUENCY RESPONSE $ RUN, THEN EACH COLUMN CORRESPONDS TO AN OUTPUT FREQUENCY. $ TABLE OUTPLIST IS THE TIME STEP/OUTPUT FREQUENCY LIST FOR SDR2. $ PARAML ASETDISP//'TRAILER'/2/S,N,ASIZE $ NUMBER OF ROWS (BOUNDARY DOF) PARAML ASETDISP//'TRAILER'/1/S,N,NUMCOLZ $ NUMBER OF COLS IN ASETDISP $ $ ---------------------------------- VERIFY KAA/BAA/MAA DATABLOCKS EXIST IF (SEBFORCE>0) THEN $ PARAML KAA//'PRESENCE'////S,N,KCHEK $ PARAML BAA//'PRESENCE'////S,N,BCHEK $ PARAML MAA//'PRESENCE'////S,N,MCHEK $ $ IF (KCHEK = -1) THEN $ STIFFNESS MATRIX NOT PRESENT $ MUST AT LEAST HAVE KAA MESSAGE //' *** USER INFORMATION MESSAGE - BOUNDARY '/ ' STIFFNESS MATRIX KAA FOR S.E. '/SEID/' NOT FOUND' $ MESSAGE //' *** USER SEMI-FATAL MESSAGE - BECAUSE KAA WAS NOT'/ 'FOUND, '/ ' BOUNDARY LOADS FOR SUPERELEMENT '/SEID/ ' WILL NOT BE PROCESSED' $ JUMP THEEND $ ENDIF $ AT LEAST KAA WAS FOUND $ IF ((SEBFORCE>0) AND (BCHEK = -1)) THEN $ DAMPING BOUNDARY MATRIX NOT PRESENT $ IF MISSING, GENERATE NULL MATRIX MESSAGE //' *** USER INFORMATION MESSAGE- BOUNDARY '/ ' DAMPING MATRIX BAA FOR S.E. '/SEID/' NOT FOUND' $ MESSAGE //' DAMPING TERMS WILL NOT BE INCLUDED IN THE'/ 'BOUNDARY FORCE CALCULATIONS' $ ENDIF $ $ IF (MCHEK = -1) THEN $ MASS BOUNDARY MATRIX NOT PRESENT $ IF MISSING, GENERATE NULL MATRIX MESSAGE //' *** USER INFORMATION MESSAGE- BOUNDARY '/ ' MASS MATRIX MAA FOR S.E. '/SEID/' NOT FOUND' $ MESSAGE //' INERTIAL TERMS WILL NOT BE INCLUDED IN THE'/ 'BOUNDARY FORCE CALCULATIONS' $ ENDIF $ $ IF (APP = 'TRANRESP') THEN $ $ ----------------------------------- PROCESSING FOR TRANSIENT ANALYSES $ PARTITION MATRIX ASETDISP INTO THREE SEPARATE DISP/VELO/ACCE $ MATRICES AND MULTIPLY BY KAA/BAA/MAA RESPECTIVELY. IF EITHER $ BAA OR MAA ARE NOT THERE, NULL MATRIX GENERATED ABOVE WILL BE USED. $ OTHERWISE USE PATTERN MATRIX FROM MATGEN TO PICK EVERY 3RD COLUMN $ AS APPROPRIATE: $ ROWS 1,4,7,...(NUMCOLZ-2) FOR DISPLACEMENTS $ ROWS 2,5,8,...(NUMCOLZ-1) FOR DISPLACEMENTS $ AND ROWS 3,6,9,...(NUMCOLZ) FOR ACCELERATIONS $ $ DISPLACEMENTS: MATGEN ,/PMD/4/1/NUMCOLZ/0/1/3/1/1/1 $ PATTERN MATRIX (100100...) PARTN ASETDISP,PMD,/,,DISPLS,/1/0 $ EXTRACT DISPLS IF (SEBFORCE > 0) THEN $ ADD KAA,KLAA/KAABNDRY $ ADD PHYSICALS + MODALS MPYAD KAABNDRY,DISPLS,/KD $ KD = KAABNDRY * DISPLS ENDIF $ $ IF ((SEBFORCE <= 0) OR (SEID <= 0)) JUMP THEEND $ $ VELOCITIES: IF(BCHEK <> -1) THEN $ MATGEN ,/PMV/4/1/NUMCOLZ/0/1/3/2/1/1 $ PATTERN MATRIX (010010...) PARTN ASETDISP,PMV,/,,VELOCS,/1/0 $ EXTRACT VELOCS MPYAD BAA,VELOCS,/BV $ BV = BAA * VELOCS ENDIF $ $ $ ACCELLERATIONS: IF(MCHEK <> -1) THEN $ MATGEN ,/PMA/4/1/NUMCOLZ/0/1/3/3/1/1 $ PATTERN MATRIX (001001...) PARTN ASETDISP,PMA,/,,ACCELS,/1/0 $ EXTRACT ACCELS ADD MAA,MLAA/MAABNDRY $ ADD PHYSICALS + MODALS MPYAD MAABNDRY,ACCELS,/MA $ MA = MAABNDRY * ACCELS ENDIF $ $ ELSE IF (APP = 'FREQRESP') THEN $ $ $ --------------------------- PROCESSING FOR FREQUENCY RESPONSE ANALYSES $ MATRIX ASETDISP CONTAINS DISPLACEMENTS (ONLY) FOR BOUNDARY. THE MAGNITUDE $ OF THE VELOCITY IS RELATED TO THE DISPLACEMENT MAGNITUDE BY THE RADIAN $ FREQUENCY, OMEGA, BUT LEADS THE DISPLACEMENTS BY 90 DEGREES. SIMILARLY $ THE ACCELERATIONS ARE MINUS OMEGA-SQUARED TIMES THE DISPLACEMENTS (AND $ HENCE LEAD BY 180 DEGREES). $ $ IN TERMS OF REAL/IMAG NOTATION: $ $ IF D = DISPLACEMENTS = (D(REAL), D(IMAG)) $ V = VELOCITIES = (V(REAL), V(IMAG)) $ = W*(-D(IMAG), D(REAL)) (W=FREQUENCY/RADS) $ A = ACCELERATIONS = (A(REAL), A(IMAG)) $ = -W*W*( D(REAL), D(IMAG)) $ $ THE OMEGA PORTION OF THE VELOCITY/ACCELERATION IS TAKEN CARE OF BY $ POST-MULTIPLYING THE (MODIFIED) DISPLACEMENT MATRIX BY A DIAGONAL $ MATRIX OF FREQUENCIES OBTAINED BY THE CALL TO SUBDMAP TFVECTOR. THE $ MODIFIED DISPLACEMENT MATRIX (ODISPLS) WITH REAL/IMAG TERMS $ SWITCHED, WHICH IS NEEDED FOR THE VELOCITY MATRIX, IS OBTAINED BY $ NORMALIZING THE DISPLACEMENT MATRIX ASETDISP, AND THEN SCALING BY $ THE REVERSE OF THE NORMALIZING FACTORS, WITH THE APPROPRIATE SIGNAGE. $ THE ACCELERATION MATRIX IS SIMPLY MINUS THE UNMODIFIED ASET $ DISPLACEMENTS TIMES OMEGA SQUARED. $ $ FOR DISPLACEMENTS: EQUIVX ASETDISP/DISPLS/ALWAYS $ ALWAYS CALL TFVECTOR OUTPLIST/TFVECT/'RADIAN ' $ GET FREQ LIST VECTOR MATMOD TFVECT,,,,,/OMEGS,/28 $ EXPAND TO DIAGONAL ADD KAA,KLAA/KAABNDRY $ ADD PHYSICALS + MODALS MPYAD KAABNDRY,DISPLS,/KD $ KD = KAABNDRY * DISPLS $ $ FOR VELOCITIES: IF (BCHEK <> -1) THEN $ MATMOD ASETDISP,,,,,/NORMDISP,/8//// S,N,REALSCAL/S,N,IMAGSCAL $ NORMALIZE IMAGSCAL = -IMAGSCAL $ MODIFY SIGN SCALER = CMPLX(IMAGSCAL,REALSCAL) $ REVERSE REAL/IMAG ADD NORMDISP,/MODISPLS/SCALER $ RESCALE, R/I SWITCHED MPYAD MODISPLS,OMEGS,/VELOCS/0 $ TIMES OMEGA(S) MPYAD BAA,VELOCS,/BV $ BV = BAA * VELOCS ENDIF $ $ $ FOR ACCELERATIONS: IF (MCHEK <> -1) THEN $ DIAGONAL OMEGS/OMEGSQR/'SQUARE'/2. $ W(I)**2 MPYAD ASETDISP,OMEGSQR,/ACCELS/0/-1 $ A(I)=-(W(I)**2)*D(I) ADD MAA,MLAA/MAABNDRY $ ADD PHYSICALS + MODALS MPYAD MAABNDRY,ACCELS,/MA $ MA = MAABNDRY * ACCELS ENDIF $ $ ENDIF $ TRANS/FREQ RESP STIFFNESS/DAMPING/INERTIAL MATRICES FORMED $ $ ------------------------------------------------------ LOAD SUMMATION $ TOTAL BOUNDARY LOADS IS SUM OF: KD (STIFFNESS FORCES), $ BV (DAMPING FORCES), AND $ MA (INERTIAL FORCES) $ BNDRY4A = (KAA*DISPLS) + (BAA*VELOCS) + (MAA*ACCELS) $ = KD + BV + MA ADD5 MA,BV,KD,,/BNDRY4A $ A-SET SIZED BOUNDARY FORCES $ $ ---------------------------------------------------- OUTPUT OPERATIONS $ EXPAND TO G-SET SIZE FOR SDR2, DMIG OPERATIONS $ UMERGE USET,BNDRY4A,/BNDRY4G/'G'/'A'/'O' $ SDR2 CASEDR,CSTMS,MPTS,DIT,EQEXINS,,ETT,OUTPLIST,BGPDTs, BNDRY4G,,,EST ,XYCDBDR,,,,,,,/ OBND4G1,,,,,/APP/S,N,NOSORT2/NOCOMPS $ SDR3 OBND4G1,,,,,/OBND4G2,,,,,/ $ OFP OBND4G2// $ MESSAGE //' ' $ MESSAGE //' ' $ MESSAGE //' THE ABOVE TABLE, LABELLED AS OLOADS, ARE REALLY THE '/ 'SUPERELEMENT BOUNDARY FORCES' $ MESSAGE //' AS CALCULATED BY THE BOUNDARY FORCE DMAP ALTER ' $ MESSAGE //' ' $ $ $ CALCULATE RESULTANT VECTORS FOR EACH OUTPUT TIME STEP/FREQUENCY. $ THE IDENTIFIER ON THE LEFT SIDE OF THE RESULTANT WILL START AT $ THE SUPERELEMENT ID AND INCREASE BY 1 FOR EACH OUTPUT ITEM. $ TABLE IS IDENTIFIED BY "BOUNDARY RESULTANT" LABEL $ $VECPLOT BNDRY4G,BGPDTS,EQEXINS,CSTMS,CASEDR,,,/TMPOUT/V,Y,GRDPNT/ VECPLOT BNDRY4G,BGPDTS,scstm,CSTMS,CASEDR,,,/TMPOUT/V,Y,GRDPNT/ -1/1/'BOUNDARY' $ MESSAGE //' ' MESSAGE //' THE ABOVE BOUNDARY RESULTANT TABLE IS THE FORCE/MOMENT'/ ' RESULTANT VECTOR FOR EACH TIME STEP/OUTPUT FREQUENCY' MESSAGE //' TAKEN ABOUT THE REFERENCE POINT SPECIFIED ON PARAM,'/ ' GRDPNT = '/GRDPNT $ MESSAGE //' ' $ $ INCLUDE XYTRAN TO CREATE TABLED1 CARDS OF THE BOUNDARY LOADS. USER $ MUST INCLUDE APPROPRIATE REQUESTS IN OUTPUT(PLOT) SECTION FOR ALL $ DOF CARDS ARE TO BE PUNCHED FOR. $ OUTPUT(XYOUT) $ XYPUNCH OLOAD /G1(T1),G1(T2),G1(T3),G2(R3),G3(R1), ETC... $ XYTRAN XYCDBdr,OBND4G2,,,,/XYPLTT/APP/'PSET'/S,N,PFILE/S,N,CARDNO/ S,N,NOXYP/1 $ $ IF ( NOXYP >=0 ) XYPLOT XYPLTT// $ $ IF (SEBFORCE = 3) THEN $ CREATE AND MATPCH MATRIX OF TIMES/FREQS PARAML TFVECT//'PRESENCE'////S,N,TFCHEK $ CREATED YET? IF(TFCHEK = -1) CALL TFVECTOR OUTPLIST/TFVECT/' ' $ MATPCH TFVECT// $ MESSAGE //'*** USER INFORMATION MESSAGE: TIME STEP/FREQUENCY LIST'/ ' HAS BEEN PUT IN THE PUNCH FILE' $ MESSAGE //' IN DMI FORMAT - SEE MATRIX LABELLED TFVECT' $ SEBFORCE = SEBFORCE - 1 ENDIF $ $ IF (SEBFORCE = 2) THEN $ PUNCH DMIG CARDS AS WELL $ DMIG CARDS CONTAIN ONLY THE FORCES AT THE GRIDS, AND DO NOT CONTAIN $ ANY OF THE OUTPUT TIMES. TO PUNCH OUT OUTPUT MATMOD BNDRY4G,EQEXINS,,,,/MATPOOL,/16/1//////////'BNDRY4G' $ MESSAGE //' ' $ MESSAGE //' *** USER INFORMATION MESSAGE: BOUNDARY FORCES'/ 'FOR SUPERELEMENT '/SEID/' HAVE BEEN PUT IN THE ' $ MESSAGE //' PUNCH FILE IN DMIG FORMAT - SEE MATRIX LABELLED '/ 'BNDRY4G' $ MESSAGE //' ' $ $ ENDIF $ $ MESSAGE //' ' $ MESSAGE //' ' $ MESSAGE //' +-----------------------------------+' $ MESSAGE //' | END OF BOUNDARY LOAD CALCULATIONS #' $ MESSAGE //' | FOR SUPERELEMENT '/SEID/ ' #' $ MESSAGE //' +-==================================#' $ MESSAGE //' ' $ MESSAGE //' ' $ $ LABEL THEEND $ SKIP TO HERE IF NO PROCESSING OR ERRORS $ $ $ --------------------- SUBDMAP TFVECTOR ------------------------------ $ $ endif $ (sebforce>0) $ IF (EXISTS<>-1) THEN $ OTM exist delete /displs,,,, $ IF (APP = 'TRANRESP') THEN $ $ ----------------------------------- PROCESSING FOR TRANSIENT ANALYSES $ PARTITION MATRIX ASETDISP INTO THREE SEPARATE DISP/VELO/ACCE $ MATRICES AND MULTIPLY BY KAA/BAA/MAA RESPECTIVELY. IF EITHER $ BAA OR MAA ARE NOT THERE, NULL MATRIX GENERATED ABOVE WILL BE USED. $ OTHERWISE USE PATTERN MATRIX FROM MATGEN TO PICK EVERY 3RD COLUMN $ AS APPROPRIATE: $ ROWS 1,4,7,...(NUMCOLZ-2) FOR DISPLACEMENTS $ ROWS 2,5,8,...(NUMCOLZ-1) FOR DISPLACEMENTS $ AND ROWS 3,6,9,...(NUMCOLZ) FOR ACCELERATIONS $ $ DISPLACEMENTS: MATGEN ,/PMD/4/1/NUMCOLZ/0/1/3/1/1/1 $ PATTERN MATRIX (100100...) PARTN ASETDISP,PMD,/,,DISPLS,/1/0 $ EXTRACT DISPLS else $ equivx asetdisp/displs/-1 $ endif $ $ $ MULTIPLY OTM BY BOUNDARY MOTION AND PRINT RESULTS $ MPYAD DIS,DISPLS,/ODISP $ MPYAD FORC,DISPLS,/OFORC $ MPYAD STRESS,DISPLS,/OSTRESS $ MPYAD SPCF,DISPLS,/OSPCF $ MPYAD MPCF,DISPLS,/OMPCF $ $ $ PRINT RESULTS $ type parm,,logical,n,sortt2=false $ type parm,,i,n,dtmi=0 if(app='TRANRESP')dtmi=1 $ $message //'dtmi ='/dtmi $ PARAML ODISP//'PRESENCE'////S,N,EXISTS $ type parm,,i,n,displfmt=0 $ paraml casedr//'DTI'/1/22//s,n,displfmt $ $ message //'displfmt = '/displfmt $ if(displfmt<0)sortt2=true $ $ word 22 = displacement format - >0 = SORT1, <0 = SORT2 PARAML TABDIS1//'PRESENCE'////S,N,EXISTS $ if (exists<>-1) then $ $tabpt tabdis1// $ zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz $message //'app ='/app $ $message //'the following should be fol' $ $tabpt outplist// $ $message //'fol should precede this message ' $ if(displfmt<>0)then $ drmh3 tabdis1,odisp,,,,,,,outplist,casedr/ofpdisp,,,/app/ DTMi/DTMi/DTMi/DTMi $ if (displfmt>0)then $ message //' ' $ message //' the following SORT1 displacements are from the OTM' $ message //' ' $ ofp ofpdisp// $ message //' ' $ message //' the preceding SORT1 displacements are from the OTM' $ message //' ' $ endif $ endif $ displfmt<>0 else $ MATPRN ODISP// $ endif $ exist<>-1 $ PARAML OFORC//'PRESENCE'////S,N,EXISTS $ $ type parm,,i,n,forcefmt=0 $ paraml casedr//'DTI'/1/28//s,n,forcefmt $ $ message //'forcefmt = '/forcefmt $ if(forcefmt<0)sortt2=true $ $ word 28 = force format - >0 = SORT1, <0 = SORT2 PARAML TABFOR1//'PRESENCE'////S,N,EXISTS $ IF (EXISTS<>-1)THEN $ if(forcefmt<>0)then $ drmh3 ,,,,,,,tabfor1,oforc,outplist,casedr/,,,ofpforc/app/ dtmi/DTMi/DTMi/DTMi $ if (forcefmt>0)then $ message //' ' $ message //' the following SORT1 force output is from the OTM' $ message //' ' $ ofp ofpforc// $ message //' ' $ message //' the preceding SORT1 force output is from the OTM' $ message //' ' $ endif $ endif $ forcefmt<>0 else $ MATPRN OFORC// $ endif $ type parm,,i,n,stresfmt=0 $ paraml casedr//'DTI'/1/25//s,n,stresfmt $ $ message //'stresfmt = '/stresfmt $ if(stresfmt<0)sortt2=true $ $ word 25 = stress format - >0 = SORT1, <0 = SORT2 PARAML OSTRESS//'PRESENCE'////S,N,EXISTS $ $ IF (EXISTS<>-1)THEN $ PARAML TABSTR1//'PRESENCE'////S,N,EXISTS $ if (exists<>-1) then $ if(stresfmt<>0)then $ drmh3 ,,,,,tabstr1,ostress,,,outplist,casedr/,,ofpstrs,/app/ dtmi/DTMi/DTMi/DTMi $ if (stresfmt>0)then $ message //' ' $ message //' the following SORT1 stress output is from the OTM' $ message //' ' $ ofp ofpstrs// $ message //' ' $ message //' the preceding SORT1 stress output is from the OTM' $ message //' ' $ endif $ stresfmt>0 endif $ stresfmt<>0 else $ MATPRN OSTRESS// $ endif $ endif $ type parm,,i,n,spcfmt=0 $ paraml casedr//'DTI'/1/37//s,n,spcfmt $ $ message //'spcfmt = '/spcfmt $ if(spcfmt<0)sortt2=true $ $ word 37 = spc force format - >0 = SORT1, <0 = SORT2 PARAML OSPCF//'PRESENCE'////S,N,EXISTS $ $ IF (EXISTS<>-1 and spcfmt<>0)THEN $ PARAML TABSPCF1//'PRESENCE'////S,N,EXISTS $ if (exists<>-1) then $ if(spcfmt>0)then $ drmh3 ,,,tabspcf1,ospcf,,,,,outplist,casedr/,ofpspcf,,/app/ dtmi/DTMi/DTMi/DTMi $ if (spcfmt>0)then $ message //' ' $ message //' the following SORT1 spc output is from the OTM' $ message //' ' $ ofp ofpspcf// $ message //' ' $ message //' the preceding SORT1 spc output is from the OTM' $ message //' ' $ endif $ spcfmt>0 endif $ spcfmt<>0 else $ MATPRN OSPCF// $ endif $ exists<>-1 - tabspcf endif $ exists<>-1 - OSPCF $ type parm,,i,n,spcfmt=0 $ paraml casedr//'DTI'/1/268//s,n,mpcfmt $ $ message //'mpcfmt = '/mpcfmt $ if(mpcfmt<0)sortt2=true $ $ word 268 = mpc format - >0 = SORT1, <0 = SORT2 PARAML OMPCF//'PRESENCE'////S,N,EXISTS $ $ IF (EXISTS<>-1)THEN $ PARAML TABMPCF1//'PRESENCE'////S,N,EXISTS $ if (exists<>-1) then $ if(mpcfmt<>0)then $ drmh3 ,,,tabMpcf1,ompcf,,,,,outplist,casedr/,ofpmpcf,,/app/ dtmi/DTMi/DTMi/DTMi $ if (mpcfmt>0)then $ message //' ' $ message //' the following SORT1 mpc output is from the OTM' $ message //' ' $ ofp ofpmpcf// $ message //' ' $ message //' the preceding SORT1 mpc output is from the OTM' $ message //' ' $ endif $ mpcfmt>0 endif $ mpcfmt<>0 else $ MATPRN OMPCF// $ endif $ endif $ $ xyplots from otm IF ( APP='REIG ' OR (APP='TRANRESP' AND NOT(NLHEAT)) or sortt2) then $ SDR3 ofpdisp,,ofpspcf,ofpforc,ofpstrs,/Odisp2,,Ospc2,oforc2,ostrs2, $ SDR3 ,,,ofpmpcf,,,/,,Ompc2,,, $ if (curvplot=-1) then $ message //'the following output is from the transformation matrices'/ ' for this superelement' $ ofp odisp2,ospc2,oforc2,ostrs2// $ ofp ompc2// $ message //'the preceding output is from the transformation matrices'/ ' for this superelement' $ endif $ message //' ' $ message //'any spcforce plots following this are properly labeled' $ message //' This alter uses the same labels and SPC force output' $ $ XYTRAN XYCDBDR,,Ospc2,Odisp2,Ostrs2,Oforc2/XYPLTT2/APP/'PSET'/ S,N,PFILE/S,N,CARDNO/S,N,NOXYP $ IF ( NOXYP >=0 ) XYPLOT XYPLTT2// $ endif $ $ message //' ' $ message //'any spcforce plots following this are improperly labeled'/ ' - they are actually MPC force output' $ message //' This alter uses the same labels and SPC force output' $ $ XYTRAN XYCDBDR,,Ompc2,,,/XYPLTTo/APP/'PSET'/ S,N,PFILE/S,N,CARDNO/S,N,NOXYP $ IF ( NOXYP >=0 ) XYPLOT XYPLTT2// $ $ end of xyplot from otm $ endif $ exists $ END OF PRINT OTM RESULTS $ COMPILE TFVECTOR SUBDMAP TFVECTOR OUTPLIST/TFVECT/FREQRADN $ $ THIS SUBDMAP WILL BUILD A VECTOR OF OUTPUT TIME STEPS FOR A $ $ TRANSIENT SOLUTION OR OUTPUT FREQUENCIES FOR A FREQUENCY RESPONSE $ $ SOLUTION FROM THE OUTPUT LIST TABLE THAT GOES INTO THE SDR2 MODULE $ $ $ INPUT DATABLOCK: $ $ OUTPLIST - OUTPUT LIST FOR SDR2 (TABLE) $ $ OUTPUT DATABLOCK: $ $ TFVECT - COLUMN VECTOR OF TIME STEPS OR FREQUENCIES $ $ PARAMETERS: $ $ FREQRADN - INPUT, BCD. IF PASSED THROUGH AS "RADIAN" THEN $ $ EXTRACTED TABLE VALUES WILL BE MULTIPLIED BY 2*PI. $ $ $ TYPE,PARM,,CHAR8,N,FREQRADN='' $ TYPE,PARM,,RS,N,TFVALUE,FREQ2RAD=1.0 $ TYPE,PARM,,CS,N,SCALER $ TYPE,PARM,,I, N,IWORD=3 $ FILE TFROW=APPEND $ $ IF(FREQRADN = 'RADIAN') FREQ2RAD = 2.*PI(1.) $ $ MATGEN ,/I1X1/1/1 $ 1 X 1 IDENTITY MATRIX $ GRAB FIRST TIME STEP/FREQUENCY AND SCALE I1X1 $ PARAML OUTPLIST//'DTI'/0/S,N,IWORD/S,N,TFVALUE $ IF (IWORD < 0) THEN $ ERROR: AT LEAST ONE TIME/FREQ NEEDED $ MESSAGE //' ' $ $ MESSAGE //'*** USER SEMI-FATAL MESSAGE FROM SUBDMAP TFVECTOR' $ MESSAGE //' NO OUTPUT TIME STEPS OR FREQUENCIES FOUND IN '/ 'OUTPUT LIST - SUBROUTINE CANNOT CONTINUE' $ MESSAGE //' ' $ $ RETURN $ $ ENDIF $ CONTINUE IF AT LEAST 1ST STEP IS FOUND $ SCALER = CMPLX((FREQ2RAD*TFVALUE), 0.) $ MULTIPLY TABLE VALUE $ ADD I1X1,/TFROW/SCALER $ SCALE 1X1 IDENTITY MATRIX BY TABLE VALUE $ $ $ NOW LOOP THROUGH LIST UNTIL IWORD IS RETURNED NEGATIVE $ DO WHILE (IWORD > 0) $ IWORD = IWORD + 1 $ PARAML OUTPLIST//'DTI'/0/S,N,IWORD/S,N,TFVALUE $ IF(IWORD < 0) JUMP OUTALOOP $ SCALER = CMPLX((FREQ2RAD*TFVALUE),0.) $ ADD I1X1,/DUMMY/SCALER $ APPEND DUMMY,/TFROW/2 $ APPEND DUMMY ONTO TFROW ENDDO $ LABEL OUTALOOP $ TRNSP TFROW/TFVECT $ CONVERT TO COLUMN VECTOR RETURN $ END $ ---------------------------------------------------------------- $ echoon