$ $ $ THIS ALTER IS CONFIDENTIAL AND A TRADE SECRET OF THE $ MSC.Software 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 MSC.Software CORPORATION. $ $ modecont.v707 $ alter to calculate the contribution for the modes in SOL 110, 111, 112 $ updated 12/01 to add transient response $ $ input: $ $ Case Control: $ $ request displacement output for the points you wish participation $ factors for $ $ Bulk Data $ $ select the dof you want the factors for by using the U3 set $ $ USET,U3,... $ and/or $ USET1,U3,... $ $ PARAM,FILTER,x.xx $ fraction of largest term = filter for printout $ any term for a dof which is less than the magnitude of $ ^^^^ the largest term multiplied by FILTER is not printed $ NOT YET IMPLEMENTED $ $ output options are controlled by PARAM,PARTFAC: $============================ $ NOTE-this parameter has no impact in transient response $============================ $ 1 = each mode's response at each dof selected (mag/phase) = default $ 2 = projection of modal response on solution for each dof $ selected(magnitude) $ 3 = fraction of total disp per mode (option 2 divided by total disp) $ 4 = scaled magnitudes ( option 2 divided by largest term in option 3 per $ dof) $ 5 = modal displacements (complex solution at each dof by mode number) $ 6 = modal resp for each mode - magnitude and phase(wrt total disp at point) $ 7 = combination - output from both options 1 and 3 $ $ options implemented at this point: 1 thru 7 $ echooff $ compile semceig alter 'call.*modacc.*clama.*cphh' $tabprt clama/////1 $ if(noue<0)then $ equivx phdh/phiatlr/always $ else $ upartn usetd,phdh/phiatlr,,temp99,/'d'/'a'/'e'/1 $ endif $ SDR1 USET,,phiatlr,,,GOA,GM,,KFS,KSS,/ UGted,,QG/1/APP1/NOQGOLD $ call partfac usetd,ugted,cphh,clama,bgpdts/output1/app $ $ compile sedrcvr alter 'SORT2=NOT(ANDL(NOSORT2,NOSTR2))' if(app='freqresp' or app='tranresp')then $ $alter 'ddrmm'(,-2) $ $ check to see if DDRMM<>-1 - this alter does not support mode-displacement $ if(app1<>'mmreig')then$ $ message //' ' $ message //' dmap alter error ' $ message //' mode-displacement data recovery is chosen for this run' $ message //' this alter does not work when this option is used - '/ ' re-submit without DDRMM=-1 ' $ message //' dmap alter terminated' $ message //' ' $ else $ call partfac uset,ug,uh1,ol1,bgpdts/output1/app $ endif $ app1=mmreig endif $ app=freqresp $ $ subdmap partfac $ find modal contributors $ compile partfac subdmap partfac uset,ug,uh1,ol1,bgpdts/output1/app type parm,,char8,n,app $ paraml uset//'USET'//////'U3'/s,n,nou3/'G'/s,n,nodof $ if(nou3<0)then $ message //' ' $ message //'DMAP warning message ' $ message //'no u3 set defined - dmap alter deactivated for this run ' $ message //' ' $ else $ $ $ u3 set defined - calculate participation factors... $ $ matrix method and u3 set exists $ calculate participation factors - at this point: $ ug = displacement matrix (eigenvectors $ UH1 = solution in modal coordinated $ $ calculate “total solution at selected dof = totalsol $ $ first step - get eigenvectors at selected dof = modes $ vec uset/partu3/'G'/'U3'/'COMP' $ partn ug,,partu3/modes,,,/1 $ $matprn modes,uh1// $ type parm,,i,n,nogset mpyad modes,uh1,/totalsol $ = complex disp at selected dof $matprn totalsol// $ $ $ place grid id in zuzri1(i) - zname = gridid $ place dof in zuzri2(i) - zname - gridid $ $ FREQ RESP AND COMPLEX MODES $ $ place complex eigenvalues in zuzrc1(k), k=mode, znami = freq $ place excitation frequencies in zuzrr1(k) - k = freq, zname=freq $ place eigen vectors in zuzrr1(i,j) - i = dof, j = mode, zname = modes $ place modal solution in zuzrc1(j,k) - k = freq, j = mode, zname = uh1 $ place solution by mode in zuzrc1(i,j,k) - zname = partfac $ place total solution in zuzrc1(i,k) - i = dof, k = freq, zname = totalsol $ $ TRANSIENT $ $ place time step in zuzrr1(k,0,0), k = timestep, zname=freq $ place total solution in zuzrr1(i,k) - i=dof, k=timestep, zname=totalsol $ place solution by mode in zuzrr1(i,j,k) - i = dof, j = mode, k = timestep $ $ $ get solution in modal coordinates $ $ IF (APP = 'TRANRESP') THEN $ $ --------PROCESSING FOR TRANSIENT ANALYSES $ PARTITION MATRIX UH1 INTO THREE DISP $ 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: type parm,,i,n,numcolz $ PARAML uh1//'TRAILER'/1/S,N,NUMCOLZ $ NUMBER OF COLS IN ASETDISP MATGEN ,/PMD/4/1/NUMCOLZ/0/1/3/1/1/1 $ PATTERN MATRIX (100100...) PARTN UH1,PMD,/,,UH1XX,/1/0 $ EXTRACT DISPLS partn totalsol,pmd,/,,dispsol,/1/0 $ get total disp $ else $ copy uh1/uh1xx $ equivx totalsol/dispsol/-1 $ endif $ $ $ get grid ids from bgpdts $ type parm,,i,n,locate,idof,iiii,igrid,prec type parm,nddl,i,n,zuzri1, zuzri2 $ type parm,nddl,char8,n,zname type parm,nddl,i,n,zuzr1,zuzr2,zuzr3 type parm,nddl,rs,n,zuzrr1,zuzrr2 type parm,,i,n,iii,jjj,kkk type parm,,rs,n,phi,partf,tempr,tempi,totp,totm,freq type parm,,rs,n,partm,partp,tempm,tempp,uhr type parm,,cs,n,uh type parm,nddl,cs,n,zuzrc1 iii = 1 $ iiii = 1 $ zname = 'gridid' $ $tabprt bgpdts/////1 $ zuzr1 = 0 $ paraml modes//'trailer'/4/s,n,prec $ get precision do while(iii<=nodof) $ get dof id zuzr2 = 0 $ zuzr3 = 0 $ paraml partu3//'dmi'/1/iii/s,n,term $ if(term=0.)then $ dof is in u3 set zuzr1 = zuzr1 + 1 $ locate = iii/6 $ zuzri2 = iii - (locate*6) $ dof locate = 3 + (locate)*(6+3*prec) $ $message //'iii = '/iii/' term ='/term $ $message //'locate = '/locate/' zuzr1 = '/zuzr1 $ paraml bgpdts//'dti'/1/locate//s,n,igrid $get grid id zuzri1 = igrid $ $ locate = locate - 1 $ $ paraml bgpdts//'dti'/1/locate//s,n,igrid $get grid id $message //' zuzri1 ='/zuzri1/'prev term ='/igrid $ $ endif $ iii = iii + 1 $ enddo $ iii - get dof id $ ************* paraml ug//'trailer'/1/s,n,nomodes $ paraml uh1//'trailer'/1/s,n,nofreq $ if(app='tranresp')nofreq=nofreq/3 $ $ $ get frequencies/timesteps $ TYPE,PARM,,I, N,IWORD=3 $ kkk = 1 $ zuzr1 = 0 $ zuzr2 = 0 $ zuzr3 = kkk $ zname = 'freq ' $ $ if complex modes, get real and imaginary terms - if(app='ceigen')then $ $ $ get first root $ message //'before paraml, iword ='/iword $ paraml ol1//'DTI'/2/s,n,iword/s,n,realv $ $message //'after first paraml, iword ='/iword $ iword = iword + 1 $ paraml ol1//'DTI'/2/s,n,iword/s,n,imagv $ $message //'after second paraml, iword ='/iword $ zuzrc1 = cmplx(realv,imagv) $ complex root $message //'kkk ='/kkk/' zuzrc1 = '/zuzrc1 $ iword = iword + 5 $ next root else $ $ GRAB FIRST FREQUENCY/timestep $ PARAML OL1//'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 DMAP ALTER' $ MESSAGE //' NO OUTPUT TIME STEPS OR FREQUENCIES FOUND IN '/ 'OUTPUT LIST - SUBROUTINE CANNOT CONTINUE' $ MESSAGE //' ' $ EXIT $ $ ENDIF $ CONTINUE IF AT LEAST 1ST STEP IS FOUND $ zuzrr1 = TFVALUE $ $ endif $ $ $ NOW LOOP THROUGH LIST UNTIL IWORD IS RETURNED NEGATIVE $ DO WHILE (IWORD > 0) $ kkk = kkk + 1 $ zuzr3 = kkk $ IWORD = IWORD + 1 $ if(app='ceigen')then $ paraml ol1//'DTI'/2/s,n,iword/s,n,realv $ IF(IWORD < 0) JUMP OUTALOOP iword = iword + 1 $ paraml ol1//'DTI'/2/s,n,iword/s,n,imagv $ zuzrc1 = cmplx(realv,imagv) $ complex root $message //'kkk ='/kkk/' zuzrc1 ='/zuzrc1 $ $message //'iword ='/iword $ iword = iword + 5 $ next root else $ PARAML OL1//'DTI'/0/S,N,IWORD/S,N,TFVALUE $ IF(IWORD < 0) JUMP OUTALOOP $ $message //'iword ='/iword/' time ='/tfvalue $ zuzrr1 = TFVALUE $ endif $ ENDDO $ LABEL OUTALOOP $ $ $ extract terms from matrices and place into parameter $ zuzr3 = 0 $ iii = 1 $ do while(iii<=nou3) $ zuzr1=iii $ zuzr3 = 0 $ jjj = 1 $ do while(jjj<=nomodes) $ zuzr2 = jjj $ zname = 'modes' $ paraml modes//'dmi'/jjj/iii/s,n,zuzrr1 $ $message //'jjj='/jjj/'iii='/iii/'zuzrr1='/zuzrr1 $ modes ok jjj = jjj + 1 $ enddo $ jjj iii = iii + 1 $ enddo $ iii jjj = 1 $ do while(jjj<=nomodes) $ kkk = 1 $ zuzr1 = jjj $ zuzr3 = 0 $ do while(kkk<=nofreq) $ zname = 'uh1 '$ zuzr2 = kkk $ paraml uh1xx//'dmi'/kkk/jjj/s,n,tempr//s,n,tempi $ $ if(app='tranresp')then $ $ zuzrr1 = tempr $ $ message //' kkk ='/kkk/' jjj = '/jjj/' zuzrr1 ='/zuzrr1 $ else $ zuzrc1 = cmplx(tempr,tempi) $ endif $ $message //'kkk= '/kkk/' jjj= '/jjj/' tempr='/tempr/' tempi='/tempi $ $ kkk = kkk + 1 $ enddo $ kkk jjj = jjj + 1 $ enddo $ jjj iii = 1 $ $matprn dispsol// $ do while(iii<=nou3) kkk = 1 $ zname = 'totalsol' $ zuzr1 = iii $ zuzr3 = 0 $ do while(kkk<=nofreq) $ zuzr2 = kkk $ paraml dispsol//'dmi'/kkk/iii/s,n,tempr//s,n,tempi $ if(app='tranresp')then $ zuzrr1=tempr $ $ message //' kkk = '/kkk/' iii='/iii/' zuzrr1='/zuzrr1 $ else $ zuzrc1 = cmplx(tempr,tempi) $ endif $ $message //'tempr='/tempr/' tempi='/tempi $ $message //'kkk='/kkk/' iii='/iii/' zuzrc1='/zuzrc1 $ ok kkk = kkk + 1 $ enddo $ kkk iii = iii + 1 $ enddo $ iii $ $ data stored in ZUZRr1(for transient) and ZUZRc1 $ use do-loop to calculate modal participation factors $ triple loop, $ outer loop = i = dof $ next loop = j = mode $ final loop = k = freq $ iii = 1 $ do while(iii<=nou3) $ zuzr1 = iii $ zuzr3 = 0 $ jjj = 1 $ do while(jjj<=nomodes) $ zuzr1 = iii $ zuzr2 = jjj $ zuzr3 = 0 $ zname = 'modes' $ phi = zuzrr1 $ zuzr1 = jjj $ kkk = 1 $ do while(kkk<=nofreq) $ zuzr1 = jjj $ zuzr2 = kkk $ zuzr3 = 0 $ zname = 'uh1 ' $ if(app='tranresp')then $ uhr = zuzrr1 $ else $ uh = zuzrc1 $ endif $ zuzr1 = iii $ zuzr2 = jjj $ zuzr3 = kkk $ zname = 'partfac' if(app='tranresp')then $ zuzrr1 = phi*uhr $ $message //'iii='/iii/' jjj='/jjj/' kkk='/kkk/' uh='/uhr/' phi='/phi $ $message //' partfac = zuzrr1 ='/zuzrr1 $ else $ zuzrc1 = cmplx(phi)*uh $ mode shape * modal solution endif $ $message //'iii='/iii/' jjj='/jjj/' kkk='/kkk/' uh='/uh/' phi='/ $ phi/' zuzrc1='/zuzrc1 $ kkk = kkk + 1 $ enddo $ kkk jjj = jjj + 1 $ enddo $ jjj iii = iii + 1 $ enddo $ iii $ $ data is now all in zuzrc1 - now we can do anything we want with it... $ $ write data $ type parm,,i,y,partfac=1 $ type parm,,rs,n,t1,t2,t3,twopi, largest,radtodeg twopi = 2.*pi(1) $ radtodeg = 360./twopi $ if(app='tranresp')then $ xxxxxxxxxxxxxxxxx $ $ $ print magnitude fraction for transient output $ message //' ' $ message //' ' $ iii = 1 $ do while(iii<=nou3) $ zuzr1 = iii $ zuzr2 = 0 $ zuzr3 = 0 $ kkk = 1 $ do while(kkk<=nofreq) $ zuzr3 = 0 $ zuzr2 = 0 $ zname = 'gridid ' $ message //' ' $ message //' results for grid '/zuzri1/' dof '/zuzri2 $ message //' '$ zuzr2 = kkk $ $ get total solution - in t1 jjj = 1 $ t1 = 0.0 zuzr1 = iii $ zuzr3 = kkk $ zname = 'partfac' $ do while(jjj<=nomodes) $ zuzr2 = jjj $ t1 = t1 + zuzrr1 $ jjj = jjj + 1 $ enddo $ jjj $ zuzr1 = 0 $ zuzr2 = 0 $ zuzr3 = kkk $ zname = 'freq ' $ freq = zuzrr1 $ message //'time step ='/freq/' sec' $ message //' '$ message //'total solution = '/t1 $ message //' ' $ message //' Contribution Fraction' $ message //' ' $ zuzr1 = iii $ jjj = 1 $ do while(jjj<=nomodes) $ zuzr2 = jjj $ zname = 'partfac' $ if(t1=0.0)then$ t2=0.0 $ else $ t2 = zuzrr1/t1 $ endif $ message //' response for mode '/jjj/' = '/zuzrr1/t2 $ jjj = jjj + 1 $ enddo $ jjj kkk = kkk + 1 $ enddo $ kkk iii = iii + 1 $ enddo $ iii message //' ' $ else $ $ freq resp and complex modes $ if(partfac<>5)then $ $ $ get magnitude and phase angles $ $ store magnitude in zuzrr1(i,j,k) - i=dof, j=mode, k=freq, zname = partfacm $ store phase in zuzrr1(i,j,k) - i=dof, j=mode, k=freq, zname = partfacp $ store projected magnitude in zuzrr1(i,j,k) - zname = magproj $ store relative phase angle in zuzrr1(i,j,k) - zname - relph $ store magnitude of total solution in zuzrr1(i,k) - zname = totalm $ store phase of total solution in zuzrr1(i,k) - zname = totolp $ iii = 1 $ do while(iii<=nou3) $ zuzr1 = iii $ zuzr3 = 0 $ kkk = 1 $ do while(kkk<=nofreq) $ zuzr2 = kkk $ zuzr3 = 0 $ $ $ get magnitude of total solution $ zname = 'totalsol' $ t1 = real(zuzrc1) $ t2 = imag(zuzrc1) $ zname = 'totalm' $ zuzrr1 = sqrt(t1**2 + t2**2) $ magnitude of total solution zname = 'totalr' $ zuzrr1 = t1 $ real part of total solution zname = 'totali' $ zuzrr1 = t2 $ imaginary part of total solution zname = 'totalp' zuzrr1 = radtodeg*(atan2(t2,t1)) $ phase angle (degrees) if(zuzrr1<0.)zuzrr1 = zuzrr1 + 360. $ kkk = kkk + 1 $ enddo $ kkk $ $ get magnitude of individual modal contributions $ zuzr1 = iii $ zuzr2 = 0 $ zuzr3 = 0 $ jjj = 1 $ do while(jjj<=nomodes) $ zuzr2 = jjj $ kkk = 1 $ do while(kkk<=nofreq) $ zuzr3 = kkk $ zname = 'partfac' $ t1 = real(zuzrc1) $ real part t2 = imag(zuzrc1) $ imaginary part zname = 'partfacr' $ zuzrr1 = t1 $ zname = 'partfaci' $ zuzrr1 = t2 $ zname = 'partfacm' $ zuzrr1 = sqrt(t1**2 + t2**2) $ magnitude $message //'iii='/iii/' jjj='/jjj/' kkk='/kkk $ $message //'magnitude = '/zuzrr1 $ zname = 'partfacp' $ zuzrr1 = radtodeg*atan2(t2,t1) $ phase angle - degrees if(zuzrr1<0.)zuzrr1 = zuzrr1+360. $ $message //'t1='/t1/' t2='/t2/' phase='/zuzrr1 $ kkk = kkk + 1 $ enddo $ kkk jjj = jjj + 1 $ enddo $ jjj iii = iii + 1 $ enddo $ iii $ $ data stored - now print it as selected $ if(partfac=1 or partfac = 7)then $ $ $ print magnitude and phase of modal partfac $ message //' ' $ if(partfac=1)then $ message //' partfac = 1 => print solution for each mode at the'/ 'selected dof as magnitude and phase' $ else $ message //' partfac = 7 => print solution for each mode at the'/ 'selected dof as magnitude and phase' $ endif $ message //' ' $ iii = 1 $ do while(iii<=nou3) $ zuzr1 = iii $ zuzr2 = 0 $ zuzr3 = 0 $ kkk = 1 $ do while(kkk<=nofreq) $ zuzr3 = 0 $ zuzr2 = 0 $ zname = 'gridid ' $ message //' ' $ message //' results for grid '/zuzri1/' dof '/zuzri2 $ message //' '$ zuzr2 = kkk $ zname = 'totalm' $ t1 = zuzrr1 $ zname = 'totalp' t2 = zuzrr1 $ message //'total solution = '/t1/t2 $ message //' ' $ zuzr1 = 0 $ zuzr2 = 0 $ zuzr3 = kkk $ zname = 'freq ' $ if(app='ceigen')then $ message //' mode number '/kkk/ ' complex eigenvalue (real,imag) ='/zuzrc1 $ message //' ' $ else $ freq = zuzrr1 $ message //'loading freq ='/freq/' hz' $ message //' '$ endif $ zuzr1 = iii $ jjj = 1 $ do while(jjj<=nomodes) $ zuzr2 = jjj $ zname = 'partfacm' $ t1 = zuzrr1 $ zname = 'partfacp' $ t2 = zuzrr1 $ message //' response for mode '/jjj/' = '/t1/t2 $ jjj = jjj + 1 $ enddo $ jjj kkk = kkk + 1 $ enddo $ kkk iii = iii + 1 $ enddo $ iii message //' ' $ endif $ partfac = 1 or 7 $ if(partfac=2 or partfac=3 or partfac=4 or partfac=6 or partfac=7)then $ $ $ print projection of modal resp on total resp $ iii = 1 $ do while(iii<=nou3) $ zuzr1 = iii $ kkk = 1 $ do while(kkk<=nofreq) $ zuzr2 = kkk $ zuzr3 = 0 $ zname = 'totalm' $ totm = zuzrr1 $ zname = 'totalp'$ totp = zuzrr1 $ jjj = 1 $ largest = -999. $ do while(jjj<=nomodes) $ zuzr1 = iii $ zuzr2 = jjj $ zuzr3 = kkk $ zname = 'partfacm' $ partm = zuzrr1 $ zname = 'partfacp' partp = zuzrr1 $ tempp = partp-totp $ tempm = partm*cos(tempp/radtodeg) $ zname = 'magproj' $ zuzrr1 = tempm $ if(partfac=6)then $ zname = 'relph' $ zuzrr1 = tempp $ endif $ if(partm>largest)largest=partm $ jjj = jjj + 1 $ enddo $ jjj $dbdict param=(zuzrr1,zuzrc1), $ select=(name,zname,zuzr1,zuzr2,zuzr3,value) $ if(partfac=2)then $ message //' ' $ message //' output is the projection'/ ' of the solution of each mode on the total solution' $ message //' ' $ zuzr3 = 0 $ zuzr2 = 0 $ zname = 'gridid ' $ message //' ' $ message //' results for grid '/zuzri1/' dof '/zuzri2 $ message //' '$ zuzr1 = 0 $ zuzr3 = kkk $ zname = 'freq ' $ if(app='ceigen')then $ message //'mode number '/kkk/ ' complex eigenvalue (real,imag) ='/zuzrc1 $ message //' ' $ else $ freq = zuzrr1 $ message //'loading freq ='/freq/' hz' $ message //' '$ endif $ zuzr3 = 0 $ zuzr1 = iii $ endif $ partfac=2 if(partfac=3 or partfac=7)then $ message //' ' $ message //' output is the ratio of the projection'/ ' of the solution for each mode to the magnitude of the'/ ' total solution' $ message //' ' $ zuzr3 = 0 $ zuzr2 = 0 $ zname = 'gridid ' $ message //' ' $ message //' results for grid '/zuzri1/' dof '/zuzri2 $ message //' '$ zuzr1 = 0 $ zuzr3 = kkk $ zname = 'freq ' if(app='ceigen')then $ message //'mode number '/kkk/ ' complex eigenvalue (real,imag) =' /zuzrc1 $ message //' ' $ else $ freq = zuzrr1 $ message //'loading freq ='/freq/' hz' $ message //' '$ endif $ zuzr1 = iii $ zuzr3 = 0 $ endif $ partfac = 3 if(partfac=4)then $ message //' ' $ message //' output is the ratio of the projection'/ ' of each mode to the largest projection' $ zuzr3 = 0 $ zuzr2 = 0 $ zname = 'gridid ' $ message //' ' $ message //' results for grid '/zuzri1/' dof '/zuzri2 $ message //' '$ message //' ' $ zuzr3 = kkk $ zuzr1 = 0 $ zname = 'freq ' $ if(app='ceigen')then $ message //'mode number '/kkk/ ' complex eigenvalue (real,imag) ='/zuzrc1 $ message //' ' $ else $ freq = zuzrr1 $ message //'loading freq ='/freq/' hz' $ message //' '$ endif $ zuzr3 = 0 $ zuzr1 = iii $ endif $ partfac = 4 if(partfac=6)then $ message //' ' $ message //' output is the magnitude of the modal'/ ' solution and its phase angle relative to the solution' $ message //' ' $ zuzr3 = 0 $ zuzr2 = 0 $ zname = 'gridid ' $ message //' ' $ message //' results for grid '/zuzri1/' dof '/zuzri2 $ message //' '$ zuzr1 = 0 $ zuzr3 = kkk $ zname = 'freq ' $ if(app='ceigen') then $ message //'mode number '/kkk/ ' complex eigenvalue (real,imag) = '/zuzrc1 $ message //' ' $ else $ freq = zuzrr1 $ message //'loading freq ='/freq/' hz' $ message //' '$ endif $ zuzr3 = 0 $ zuzr1 = iii $ endif $ partfac = 6 message //' ' $ zuzr1 = iii $ zuzr2 = kkk $ zuzr3 = 0 $ zname = 'totalsol' $ message //' total solution ' $ message //' real and imaginary = '/zuzrc1 $ message //' magnitude and phase = '/totm/totp $ message //' ' message //' partfac = '/partfac $ message //' ' $ jjj = 1 $ do while(jjj<=nomodes) $ print loop zuzr1 = iii $ zuzr2 = jjj $ zuzr3 = kkk $ if(partfac=2)then $ zname = 'magproj' $ message //' response for mode '/jjj/' = '/zuzrr1 $ endif $ partfac=2 if(partfac=3 or partfac=7)then $ zname = 'magproj' $ tempm = zuzrr1/totm $ message //' response for mode '/jjj/' = '/tempm $ endif $ partfac=3 or 7 if(partfac=4)then $ zname = 'magproj' $ tempm = zuzrr1/largest $ message //' response for mode '/jjj/' = '/tempm $ endif $ partfac=4 if(partfac=6)then $ zname = 'partfacm' tempm = zuzrr1 $ zname = 'relph' $ tempp = zuzrr1 $ message //' response for mode '/jjj/' = '/tempm/tempp $ endif $ partfac=6 $ message //' ' $ jjj = jjj + 1 $ enddo $ jjj kkk = kkk + 1 $ enddo $ kkk iii = iii + 1 $ enddo $ iii endif $ partfac=2, 3, 4, 6, or 7 $ endif $ partfac<>5 if(partfac=5)then $ print each mode's solution message //' ' $ message //' partfac = 5 => print solution for each mode at each '/ 'selected dof as real and imaginary terms' $ iii = 1 $ do while(iii<=nou3) $ zuzr1 = iii $ zuzr2 = 0 $ zuzr3 = 0 $ kkk = 1 $ do while(kkk<=nofreq) $ zuzr3 = 0 $ zuzr2 = 0 $ zname = 'gridid ' $ message //' ' $ message //' results for grid '/zuzri1/' dof '/zuzri2 $ message //' '$ zuzr2 = kkk $ zname = 'totalsol' $ message //'total solution ' $ message //' real/imaginary = '/zuzrc1 $ message //' magnitude/phase= '/totm/totp $ zuzr2 = 0 $ zuzr3 = kkk $ zuzr1 = 0 $ zname = 'freq ' $ freq = zuzrr1 $ zuzr1 = iii $ zuzr3 = 0 $ message //'loading freq ='/freq/' hz' $ message //' '$ jjj = 1 $ do while(jjj<=nomodes) $ zuzr2 = jjj $ zname = 'partfac' $ message //' response for mode '/jjj/' = '/zuzrc1 $ jjj = jjj + 1 $ enddo $ jjj kkk = kkk + 1 $ enddo $ kkk iii = iii + 1 $ enddo $ iii message //' ' $ endif $ partfac = 1 $ $ endif $ not tranresp $ endif $ u3 set defined return $ end $ partfac $ $ $ end of partfaca.v70 - phew!!! $ echoon $