1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310
|
$ COSMIC ALTERS FOR DIRECT FORCED VIBRATION ANALYSIS (COSDFVA)
$ ALTER 3 $
INSERT FILE $
FILE UXVF=APPEND/PDT=APPEND/PD=APPEND $
$ PERFORM INITIAL ERROR CHECKS ON NSEGS AND KMAX.
COND ERRORC1,NSEGS $ IF USER HAS NOT SPECIFIED NSEGS.
COND ERRORC1,KMAX $ IF USER HAS NOT SPECIFIED KMAX.
PARAM //*EQ*/CYCIOERR /V,Y,CYCIO=0 /0 $
COND ERRORC1,CYCIOERR $ IF USER HAS NOT SPECIFIED CYCIO.
PARAM //*DIV*/NSEG2 /V,Y,NSEGS /2 $ NSEG2 = NSEGS/2
PARAM //*SUB*/KMAXERR /NSEG2 /V,Y,KMAX $
COND ERRORC1,KMAXERR $ IF KMAX .GT. NSEGS/2
$ SET DEFAULTS FOR PARAMETERS.
PARAM //*NOP*/V,Y,NOKPRT=+1 /V,Y,LGKAD=-1 $
$ CALCULATE OMEGA, 2*OMEGA AND OMEGA**2 FROM RPS. SET DEFAULT RPS.
PARAMR //*MPY*/OMEGA /V,Y,RPS=0.0 /6.283185 $
PARAMR //*MPY*/OMEGA2 /2.0 /OMEGA $
PARAMR //*MPY*/OMEGASQR /OMEGA /OMEGA $
$ GENERATE NORPS FLAG IF RPS IS ZERO.
PARAMR //*EQ*//V,Y,RPS /0.0 ////NORPS $
$ MAKE SURE COUPLED MASSES HAVE NOT BEEN REQUESTED.
PARAM //*NOT*/NOLUMP /V,Y,COUPMASS=-1 $
COND ERRORC2,NOLUMP $
$ ALTER 21,21 $ ADD SLT TO OUTPUT FOR TRLG.
DELETE GP3 $
GP3 GEOM3,EQEXIN,GEOM2 / SLT,GPTT / NOGRAV $
$ ALTER 24 $
INSERT TA1,2 $
$ SINCE MULTIPLE CONSTRAINTS ARE NOT ALLOWED EXECUTE GP4 NOW SO THAT
$ MORE ERROR CHECKS CAN BE MADE BEFORE ELEMENT GENERATION.
$ ADD YS NEEDED FOR PSF RECOVERY IN SSG2.
PARAM //*MPY*/NSKIP /0/0 $
GP4 CASECC,GEOM4,EQEXIN,GPDT,BGPDT,CSTM,/RG,YS,USET,ASET,/LUSET/
S,N,MPCF1/S,N,MPCF2/S,N,SINGLE/S,N,OMIT/S,N,REACT/S,N,NSKIP/
S,N,REPEAT/S,N,NOSET/S,N,NOL/S,N,NOA/C,Y,ASETOUT/C,Y,AUTOSPC $
PURGE GM,GMD/MPCF1/GO,GOD/OMIT/KFS,PSF,QPC/SINGLE $
$ SUPORT BULK DATA IS NOT ALLOWED.
PARAM //*NOT*/REACDATA /REACT $
COND ERRORC3,REACDATA $
$ EXECUTE DPD NOW SO CHECKS CAN BE MADE. ADD TRL TO OUTPUT DATA BLOCKS.
DPD DYNAMICS,GPL,SIL,USET / GPLD,SILD,USETD,TFPOOL,DLT,PSDL,FRL,,
TRL,,EQDYN / LUSET/S,N,LUSETD/NOTFL/S,N,NODLT/S,N,NOPSDL/
S,N,NOFRL/NONLFT/S,N,NOTRL/NOEED//S,N,NOUE $
$ MUST HAVE EITHER FREQ OR TSTEP BULK DATA.
PARAM //*AND*/FTERR /NOFRL /NOTRL $
COND ERRORC5,FTERR $ NO FREQ OR TSTEP BULK DATA.
$ ONLY FREQUENCY OR TSTEP IS ALLOWED IN THE CASE CONTROL
PARAML CASECC //*TABLE1*/1/14//FREQSET $
PARAML CASECC //*TABLE1*/1/38//TIMESET $
PARAM //*MPY*/FREQTIME /FREQSET /TIMESET $
PARAM //*NOT*/FTERR1 /FREQTIME $
PARAM //*LE*/NOFREQ /FREQSET /0 $
PARAM //*LE*/NOTIME /TIMESET /0 $
COND ERRORC6,FTERR1 $ BOTH FREQ AND TSTEP IN CASE CONTROL DECK.
$ EPOINT BULK DATA NOT ALLOWED
PARAM //*NOT*/EXTRAPTS /NOUE $
COND ERRORC4,EXTRAPTS $
$ GENERATE DATA FOR CYCT2 MODULE.
GPCYC GEOM4,EQDYN,USETD /CYCDD /CTYPE=ROT /S,N,NOGO $
COND ERRORC1,NOGO $
$ ALTER 34 $
INSERT EMA,1 $
$ PRE-PURGE DATA BLOCKS THAT WILL NOT BE GENERATED
PARAM //*OR*/NOBM1 /NOMGG /NORPS $
PURGE B1GG,M1GG /NOBM1 $
PURGE M2GG,M2BASEXG /NOMGG $
$ ALTER 38 $
INSERT EMA(2),1 $
$ GENERATE DATA BLOCKS FRLX, B1GG, M1GG, M2GG AND BASEGX.
$ GENERATE PARAMETERS FKMAX AND NOBASEX.
FVRSTR1 CASECC,BGPDT,CSTM,DIT,FRL,MGG,, / FRLX,B1GG,M1GG,M2GG,BASEXG,
PDZERO,, /NOMGG/V,Y,CYCIO/V,Y,NSEGS/V,Y,KMAX/S,N,FKMAX/
V,Y,BXTID=-1/V,Y,BXPTID=-1/V,Y,BYTID=-1/V,Y,BYPTID=-1/
V,Y,BZTID=-1/V,Y,BZPTID=-1/S,N,NOBASEX/NOFREQ/OMEGA $
PARAML FRLX //*PRES*////NOFRLX $
COND LBLFRLX,NOFRLX $
EQUIV FRLX,FRL $
LABEL LBLFRLX $
$ ALTER 47 $
INSERT EMA(4),2 $
PARAM //*ADD*/NOBGG /NOBM1 /0 $ RESET NOBGG.
$ ALTER 58 $
INSERT GPSTGEN $
$ REDEFINE BGG AND KGG.
COND LBL11A,NOBM1 $
PARAMR //*COMPLEX*// OMEGA2 /0.0/ CMPLX1 $
PARAMR //*SUB*/ MOMEGASQ / 0.0 / OMEGASQR $
PARAMR //*COMPLEX*// MOMEGASQ / 0.0 / CMPLX2 $
ADD BGG,B1GG / BGG1 / (1.0,0.0) / CMPLX1 $
EQUIV BGG1,BGG $
ADD KGG,M1GG / KGG1 / (1.0,0.0) / CMPLX2 $
EQUIV KGG1,KGG $
LABEL LBL11A
$ ALTER 59,62 $ GP4 HAS BEEN MOVED-UP.
DELETE GP4,-1,GP4,2 $
$ ALTER 87,87 $ DPD HAS BEEN MOVED-UP.
DELETE DPD $
$ ALTER 112 $ PARAM AND EQUIV LOGIC DEPENDING ON LGKAD FOR FREQ/TRAN.
INSERT GKAD,-3 $
PARAM //*AND*/KDEKA/NOUE/NOK2PP $
COND LGKAD1,LGKAD $ BRANCH IN NOT FREQRESP.
$ ALTER 113 $ SEE ALTER 112 COMMENT.
INSERT GKAD,-2 $
JUMP LGKAD2 $
LABEL LGKAD1 $
EQUIV M2PP,M2DD/NOA/B2PP,B2DD/NOA/K2PP,K2DD/NOA/MAA,MDD/MDEMA/
KAA,KDD/KDEKA $
LABEL LGKAD2 $
$ ALTER 115,115 $ ADD PARAMETERS GKAD, W3 AND W4 TO GKAD.
DELETE GKAD $
GKAD USETD,GM,GO,KAA,BAA,MAA,K4AA,K2PP,M2PP,B2PP/KDD,BDD,MDD,GMD,
GOD,K2DD,M2DD,B2DD/C,Y,GKAD=TRANRESP/*DISP*/*DIRECT*/
C,Y,G=0.0/C,Y,W3=0.0/C,Y,W4=0.0/NOK2PP/NOM2PP/NOB2PP/MPCF1/
SINGLE/OMIT/NOUE/NOK4GG/NOBGG/KDEK2/-1 $
$ ALTER 116 $ SEE ALTER 112 COMMENT.
INSERT GKAD,1 $
COND LGKAD3,LGKAD $ BRANCH IF NOT FREQRESP.
$ ALTER 117 $ SEE ALTER 112 COMMENT.
INSERT GKAD,2 $
JUMP LGKAD4 $
LABEL LGKAD3 $
EQUIV B2DD,BDD/NOGPDT/M2DD,MDD/NOSIMP/K2DD,KDD/KDEK2 $
LABEL LGKAD4 $
$ ALTER 118,122 $
DELETE FRRD,-2,VDR $
$ NEW SOLUTION LOGIC
$ GENERATE TIME-DEPENDENT LOADS IF TSTEP WAS REQUESTED IN CASE CONTROL.
$ USE FOL INSTEAD OF PPF TO GET OUTPUT FREQUENCY LIST.
COND LBLTRL1,NOTIME $
$ LOOP THRU ALL SUBCASES FOR TIME-DEPENDENT LOADS.
PARAM //*MPY*/REPEATT /1 /-1 $
PARAM //*ADD*/APPFLG /1 /0 $ INITIALIZE FOR SDR1.
LABEL TRLGLOOP $
CASE CASECC,/CASEYY/*TRAN*/S,N,REPEATT/S,N,NOLOOP1 $
PARAM //*MPY*/NCOL /0 /1 $
TRLG CASEYY,USETD,DLT,SLT,BGPDT,SIL,CSTM,TRL,DIT,GMD,GOD,,EST,MGG,/
,,PDT1,PD1,,TOL/ NOSET/NCOL $
SDR1 TRL,PDT1,,,,,,,,, / ,PDT, /APPFLG/*DYNAMICS* $
SDR1 TRL,PD1 ,,,,,,,,, / ,PD , /APPFLG/*DYNAMICS* $
PARAM //*ADD*/APPFLG /APPFLG /1 $ APPFLG=APPFLG+1.
COND TRLGDONE,REPEATT $
REPT TRLGLOOP,100 $
JUMP ERROR3 $
LABEL TRLGDONE $
FVRSTR2 TOL,,,,,,, / FRLZ,FOLZ,REORDER1,REORDER2,,,, /V,Y,NSEGS/
V,Y,CYCIO/S,Y,LMAX=-1/FKMAX/S,N,FLMAX/S,N,NTSTEPS/S,N,NORO1/
S,N,NORO2 $
EQUIV FRLZ,FRL // FOLZ,FOL $
JUMP LBLFRL2 $
LABEL LBLTRL1 $
$ GENERATE FREQUENCY-DEPENDENT LOADS IF FREQUENCY WAS SELECTED IN CC.
FRLG CASEXX,USETD,DLT,FRL,GMD,GOD,DIT, / PPF,PSF,PDF,FOL,PHFDUM /
*DIRECT*/FREQY/*FREQ* $
COND LBLFRLX1,NOFRLX $ ZERO OUT LOAD COLUMNS IF FRLX WAS GENERATED.
MPYAD PPF,PDZERO, / PPFX /0 $
EQUIV PPFX,PPF $
LABEL LBLFRLX1 $
$ FORM NEW LOADS.
COND LBLFRL1,NOBASEX $
MPYAD M2GG,BASEXG, / M2BASEXG /0 $
ADD PPF,M2BASEXG / PPF1 /(1.0,0.0) /(-1.0,0.0) $
EQUIV PPF1,PPF $
COND LBLBASE1,NOSET $
SSG2 USETD,GMD,YS,KFS,GOD,,PPF / ,PODUM1,PSF1,PDF1 $
EQUIV PSF1,PSF // PDF1,PDF $
LABEL LBLBASE1 $
LABEL LBLFRL1 $
EQUIV PPF,PDF/NOSET $
$ LOADS ARE FREQUENCY-DEPENDENT
$ PERFORM CYCLIC TRANSFORMATION ON LOADS IF CYCIO=+1.
PARAML PDF //*TRAILER*/1 /PDFCOLS $
$ CALCULATE THE NUMBER OF LOADS FOR CYCIO=-1.
PARAM //*DIV*/NLOAD /PDFCOLS /FKMAX $ NLOAD = NF/FKMAX
EQUIV PDF,PXF/CYCIO $
COND LBLPDONE,CYCIO $
$ CALCULATE THE NUMBER OF LOADS FOR CYCIO=1.
PARAM //*DIV*/NLOAD /PDFCOLS /V,Y,NSEGS $ NLOAD = NF/NSEGS
CYCT1 PDF / PXF,GCYCF1 /CTYPE /*FORE*/V,Y,NSEGS=-1 /V,Y,KMAX=-1/
NLOAD /S,N,NOGO $
COND ERRORC1,NOGO $
JUMP LBLPDONE $
LABEL LBLFRL2 $
$ LOADS ARE TIME-DEPENDENT
PARAM //*NOT*/NOTCYCIO /V,Y,CYCIO $
$ BRANCH DEPENDING ON VALUE OF CYCIO
COND LBLTRL2,NOTCYCIO $
$ CYCIO=-1
EQUIV PD,PDTRZ1/NORO1 $
COND LBLRO1A,NORO1 $
MPYAD PD,REORDER1, / PDTRZ1 / 0 $
LABEL LBLRO1A $
CYCT1 PDTRZ1 / PXTRZ1,GCYCF2 /CTYPE/*FORE*/NTSTEPS/V,Y,LMAX/FKMAX/
S,N,NOGO $
COND ERRORC1,NOGO $
EQUIV PXTRZ1,PXFZ1/NORO2 $
COND LBLRO2A,NORO2 $
MPYAD PXTRZ1,REORDER2, / PXFZ1 /0 $
LABEL LBLRO2A $
EQUIV PXFZ1,PXF1 $
JUMP LBLTRL3 $
LABEL LBLTRL2 $
$ CYCIO = +1
MPYAD PD,REORDER1, / PDTRZ2 / 0 $
CYCT1 PDTRZ2 /PXTRZ2,GCYCF3 /CTYPE/*FORE*/NTSTEPS/V,Y,LMAX/
V,Y,NSEGS/S,N,NOGO $
COND ERRORC1,NOGO $
EQUIV PXTRZ2,PXTR2/NORO2 $
COND LBLRO2B,NORO2 $
MPYAD PXTRZ2,REORDER2, / PXTR2 /0 $
LABEL LBLRO2B $
CYCT1 PXTR2 / PXFZ2,GCYCF4 / CTYPE/*FORE*/V,Y,NSEGS/V,Y,KMAX/
FLMAX/S,N,NOGO $
COND ERRORC1,NOGO $
EQUIV PXFZ2,PXF1 $
LABEL LBLTRL3 $
$ TIME-DEPENDENT LOADS ARE REAL. MAKE LOADS COMPLEX TO CORRESPOND
$ TO FREQUENCY DEPENDENT LOADS. ALSO SDR2 EXPECTS LOADS TO BE COMPLEX
$ IN FREQRESP TYPE PROBLEMS.
COPY PXF1 / PXF2 $ CONVERT REAL PXF1 TO COMPLEX PXF.
ADD PXF1,PXF2 / PXF / (0.5,1.0) / (0.5,-1.0) $
$ DEFINE NLOAD FOR CYCT2.
PARAM //*ADD*/NLOAD /FLMAX /0 $ NLOAD = FLMAX
LABEL LBLPDONE $
PARAM //*ADD*/KINDEX /V,Y,KMIN=0 /0 $ INTITIALIZE KINDEX.
$
$ INITIALIZE UXVF IF KMIN IS NOT ZERO.
$
PARAM //*ADD*/KMINL /V,Y,KMIN /-1 $
COND NOKMINL,KMINL $
PARAM //*ADD*/KMINV /0 /0 $
LABEL KMINLOOP $
CYCT2 CYCDD,,,PXF,, /,,PKFZ,, /*FORE*/V,Y,NSEGS/KMINV/CYCSEQ/NLOAD/
S,N,NOGO $
COND ERRORC1,NOGO $
ADD PKFZ, / UKVFZ / (0.0,0.0) $
PRTPARM //0/*KINDEX* $
CYCT2 CYCDD,,,UKVFZ,, /,,UXVF,, /*BACK*/V,Y,NSEGS/
KMINV/CYCSEQ/NLOAD/S,N,NOGO $
PRTPARM //0/*KINDEX* $
COND ERRORC1,NOGO $
PARAM //*ADD*/KMINV /KMINV /1 $
REPT KMINLOOP,KMINL $
LABEL NOKMINL $
LABEL TOPCYC $ LOOP ON KINDEX
COND NOKPRT,NOKPRT $
PRTPARM //0 /*KINDEX* $
LABEL NOKPRT $
CYCT2 CYCDD,KDD,MDD,,, /KKKF,MKKF,,, /*FORE*/V,Y,NSEGS/KINDEX/
CYCSEQ=-1/NLOAD/S,N,NOGO $
COND ERRORC1,NOGO $
CYCT2 CYCDD,BDD,,PXF,, /BKKF,,PKF,, /*FORE*/V,Y,NSEGS/KINDEX/
CYCSEQ/NLOAD/S,N,NOGO $
COND ERRORC1,NOGO $
$ SOLUTION
FRRD2 KKKF,BKKF,MKKF,,PKF,FOL / UKVF /0.0/0.0/-1.0 $
CYCT2 CYCDD,,,UKVF,, /,,UXVF,, /*BACK*/V,Y,NSEGS/KINDEX/CYCSEQ/
NLOAD/S,N,NOGO $
COND ERRORC1,NOGO $
PARAM //*ADD*/KINDEX/KINDEX/1 $ KINDEX = KINDEX + 1
PARAM //*SUB*/DONE / V,Y,KMAX / KINDEX $
COND LCYC2,DONE $ IF KINDEX .GT. KMAX THEN EXIT
REPT TOPCYC,100 $
JUMP ERROR3 $
LABEL LCYC2 $
EQUIV UXVF,UDVF / CYCIO $
COND LCYC3,CYCIO $ IF CYCIO .GE. 0 THEN TRANSFORM TO PHYSICAL.
CYCT1 UXVF / UDVF,GCYCB1 / CTYPE/*BACK*/V,Y,NSEGS/V,Y,KMAX/NLOAD $
LABEL LCYC3 $
COND LBLTRL4,NOTIME $
EQUIV PXF,PDF2 / CYCIO $
COND LCYC4,CYCIO $ IF CYCIO .GE. 0 THEN TRANSFORM TO PHYSICAL.
CYCT1 PXF / PDF2,GCYCB2 / CTYPE/*BACK*/V,Y,NSEGS/V,Y,KMAX/NLOAD $
LABEL LCYC4 $
$ IF LOADS WERE TIME-DEPENDENT THEN RECOVER PPF AND PSF FROM PXF.
SDR1 USETD,,PDF2,,,GOD,GMD,,,, / PPFZ,, /1 /*DYNAMICS* $
SSG2 USETD,GMD,YS,KFS,GOD,,PPFZ / ,PODUM,PSFZ,PLDUM $
EQUIV PPFZ,PPF // PSFZ,PSF $
LABEL LBLTRL4 $
VDR CASEXX,EQDYN,USETD,UDVF,FOL,XYCDB,/OUDVC1,/*FREQRESP*/
*DIRECT*/S,N,NOSORT2/S,N,NOD/S,N,NOP/0 $
$ ALTER 138,138 $ USE FOL INSTEAD OF PPF TO GET OUTPUT FREQUENCY LIST.
DELETE SDR2 $
SDR2 CASEXX,CSTM,MPT,DIT,EQDYN,SILD,,,BGPDP,FOL,QPC,UPVC,EST,XYCDB,
PPF,/OPPC1,OQPC1,OUPVC1,OESC1,OEFC1,PUPVC1,,/*FREQRESP*/
S,N,NOSORT2 $
$ ALTER 160 $ ADD LABEL FOR ERROR3.
INSERT PLOT(2),4 $
LABEL ERROR3 $
$ ALTER 163,166 $ REMOVE ERROR1 AND ERROR2.
DELETE PLOT(2),7,PLOT(2),10 $
$ ALTER 168 $ FORCED VIBRATION ERRORS
INSERT END,-3 $
LABEL ERRORC1 $ CHECK NSEGS, KMAX AND OTHER CYCLIC DATA.
PRTPARM //-5 /*CYCSTATICS* $
LABEL ERRORC2 $ COUPLED MASS NOT ALLOWED.
PRTPARM //0 /C,Y,COUPMASS $
JUMP FINIS $
LABEL ERRORC3 $ SUPORT BULK DATA NOT ALLOWED.
PRTPARM //-6 /*CYCSTATICS* $
LABEL ERRORC4 $ EPOINT BULK DATA NOT ALLOWED.
PRTPARM //0 /*NOUE* $
JUMP FINIS $
LABEL ERRORC5 $ NEITHER FREQ OR TSTEP WERE IN BULK DATA DECK.
PRTPARM //0 /*NOFRL* $
PRTPARM //0 /*NOTRL* $
JUMP FINIS $
LABEL ERRORC6 $ BOTH FREQ AND TSTEP WERE SELECTED IN CASE CONTROL.
PRTPARM //0 /*NOFREQ* $
PRTPARM //0 /*NOTIME* $
ENDALTER $
|