$ $ 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. $ echooff $ $ $ mtacca.v70 - updated on 8-11-97 $ mtacca.v69 - updated for v69 - 9-25-96 $ $ updated Aug, 1997 - if output is not for all timesteps $ $ alter to handle initial acceleration $ conditions in a modal transient solution $ - assumes that the initial load is a 'steady-state' acceleration $ (pre-load) and subtracts that from the loading. After the solution, $ the static solution (using the modes) is added to the transient $ solution $ $ written by Ted Rose $ updated for v68 - 9/7/1994 $ $ uses input parameter RBMODES = no of 0 freq modes $ RBMODES = the number of rigid body modes If it is $ positive, then the rigid-body $ motion will be removed $ if RBMODES < 0 then it is the negative $ of the number of rigid-body modes $ and the rigid body motion is not $ removed from the solution $ compile semtran $ alter 1 $ putsys(0,192) $ $ $alter 'TRLG' $ alter 'ph.*pht' type parm,,i,n,notime,i1,i2,nomodes $ type parm,,i,y,rbmodes=6,rbmod=1 $ $ get first column of modal loading vector paraml pht//'TRAILER'/1/s,n,notime $ $ i1 = notime - 1 $ if (rbmodes<0) then $ subtract rigid-body displacements rbmodes = -rbmodes $ rbmod = -1 $ endif $ if (rbmodes=0)rbmod=0 $ matgen /col1/6/notime/1/i1 $ partn pht,col1,/load1,,,/1 $ get first column $MATPRN load1// $ $ $ remove initial load from all steps $ $ matgen /allloads/4/1/notime/1/1/1/1/1 $ $MATPRN ALLLOADS// $ norm allloads/unitload $ trnsp unitload/unittran $ mpyad load1,unittran,/initload $ $MATPRN unitload,initload// $ type parm,,cs,n,(c1=(1.,0.),(c2=(-1.,0.)) $ add pht,initload/newload/c1/c2 $ MESSAGE //'original pht' $ $MATPRN ph// $ purgex /pht,,,,/always $ equivx newload/pht/always $ $ MESSAGE //'modified pht' $ $MATPRN ph// $ diagonal khh/eigval $ paraml eigval//'TRAILER'/2/s,n,nomodes $ i2 = nomodes-rbmodes $ matgen /rp1/6/nomodes/rbmodes/i2 $ partn eigval,,rp1/rbm,elasm,,/1 $ get eigenvalues $MATPRN eigval,rbm,elasm// $ diagonal elasm/kinv/'WHOLE'/-1. $ partn load1,,rp1/rbaccel,elasload,,/1 $ $ $ calculate initial modal displacements $ $MATPRN rbaccel,elasload,kinv// $ add kinv,elasload/initd///1 $ merge ,,initd,,,,rp1/initdisp/1 $ type parm,,i,n,not3 $ not3 = notime*3 $ MATGEN ,/PMD/4/1/not3/0/1/3/1/1/1 $ NORM PMD/PMDISP $ trnsp pmdisp/pmdt $ mpyad initdisp,pmdt,/statdisp $ $MATPRN initdisp,initd,pmdisp,statdisp// $ $ $ initial acceleration $ MATGEN ,/PMA/4/1/not3/0/1/3/3/1/1 $ NORM PMA/PMACCE $ trnsp pmacce/pmat $ merge rbaccel,,,,,rp1/rbacc/1 $ mpyad rbacc,pmat,/initaccl $ $MATPRN pmacce,rbaccel,rbacc,initaccl// $ $ $ combine disp and accel $ add statdisp,initaccl/initsol $ $ alter 'TRD1' $ add initial solution to modal solution $ $ correction if output is not for all timesteps $ paraml uht//'TRAILER'/1/s,n,nsols $ paraml initsol//'TRAILER'/1/s,n,nsolsi $ if (nsols<>nsolsi) then $ type parm,,i,n,temp $ temp = nsolsi-nsols $ matgen ,/partnit/6/nsolsi/nsols/temp $ partn initsol,partnit,/init2,,,/1 $ purgex /initsol,,,,/always $ equivx init2/initsol/always $ ********** partn pmd,,partnit/pmd11,,,/1 $ purgex/pmd,,,,/always $ equivx pmd11/pmd/always $ endif $ $ add initsol,uht/newsol $ if (rbmod>0) then $ $ $ remove rigid-body disp $ partn newsol,pmd,/therest,,newdisp,/1 $ partn newdisp,,rp1/,elasdisp,,/1 $ merge ,,elasdisp,,,,rp1/norb/1 $ merge therest,,norb,,pmd,/newsol1/1 $ purgex /newsol,,,,/always $ equivx newsol1/newsol/always $ else $ purgex /uht,,,,/always $ endif $ equivx newsol/uht/always $ $ $ end of alter $ echoon $