$ $ 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. $ $ $ updated for v70 6-5-97 $ echooff $ $ $ premaca.v69 - updated for v69 -- jml - 9-25-96 $ $ $ updated for system built on on 3-14-95 VERSION 68.2 $ $ filename - premaca.v68 $ $ Cross-Orthogonality calculation DMAP for SOL 103 - V67 $ $ Reads DMIG input modes and compares to calculated modes $ Input modes are from full (or larger) run $ $ Input: UGVEXT as DMIG (input modes) $ $ Outputs: PHIEXT as DMIG (computed modes) $ PHIEX2 as DMIG (system modes without reduction) $ MAAEXT as DMIG (ASET mass) $ (all are for subsequent post-test run) $ $ Computes: MAC (modal assurance criterion) $ CHECKIT (UGVEXT(T)*MAA*UGVEXT) $ ORTHOA (PHA(T)*MAA*UGVEXT) $ COMPILE MODERS, list $ ALTER 5 TYPE PARM,,I,N,EVAL=-1,MODENO=0 $ TYPE PARM,,I,N,MODNOM1,MOLEFT $ TYPE PARM,NDDL,I,N,LUSETS,ZUZR1 $ TYPE DB,MATPOOL $ TYPE DB,ZUZR01 $ $ALTER 86 $ V66 $ALTER 89 $ V66A AND V66B $ALTER 116 $ BEFORE RETURN alter 'return'(1,-1) $ $ MODAL ASSURANCE CRITERIA $ MTRXIN ,,MATPOOL,EQEXINS,SILS,/UGVEXT,,/LUSETS/S,N,EVAL $ IF (EVAL=1) THEN $ MESSAGE // ' ' $ MESSAGE //'MODAL ASSURANCE CRITERIA'/ ' FOR RESIDUAL STRUCTURE A-SET' $ MESSAGE // ' ' $ IF (EVAL<-2)MATPRN UGVEXT// $ UPARTN USET,UGVEXT/TESTA,,,/'G'/'A'/'O'/1 $ $ $ CALCULATE MODAL ASSURANCE CRITERIA TRNSP PHA/PHAT $ MPYAD PHAT,PHA,/PHASQ $ TRNSP TESTA/TESTAT $ MPYAD TESTAT,TESTA,/TESTASQ $ $ $ Get number of modes $ TYPE PARM,,I,N,NTEST=0,NPHA=0,IP,IT,TS,TE,ndof $ TYPE PARM,,RS,N,MAC,PSQ,TSQ,MTEMP $ PARAML TESTA//'TRAILER'/1/S,N,NTEST $ PARAML PHA//'TRAILER'/1/S,N,NPHA $ $ MESSAGE //'MODAL ASSURANCE CALCULATION IS PERFORMED FOR '/NPHA/ ' CALCULATED MODES AND '/NTEST/' INPUT MODES' $ MESSAGE // ' ' $ $ $ LOOP ON CALCULATED MODES $ IP = 1 $ DO WHILE (IP<=NPHA) $ TS = IP-1 $ TE = NPHA-IP $ MATGEN ,/PARTP/6/NPHA/TS/1/TE $ PARTN PHA,PARTP,/,,MODEP,/1 $ PARAML PHASQ//'DMI'/IP/IP/S,N,PSQ $ $ $ LOOP ON TEST MODES $ IT = 1 $ DO WHILE (IT<=NTEST) $ TS = IT-1 $ TE = NTEST-IT $ MATGEN ,/PARTT/6/NTEST/TS/1/TE $ PARTN TESTA,PARTT,/,,MODET,/1 $ MPYAD MODET,MODEP,/MACM/1 $ PARAML TESTASQ//'DMI'/IT/IT/S,N,TSQ $ PARAML MACM//'DMI'/1/1/S,N,MTEMP $ MAC = MTEMP*MTEMP/(PSQ*TSQ) $ $ MESSAGE //' ANALYTICAL MODE '/IP/' COMPARED TO INPUT MODE '/ IT/ ' - MAC = '/MAC $ IT = IT + 1 $ ENDDO $ IP = IP + 1 $ ENDDO $ $ $ add phiT*M*input $ $ $ normalize input modes to unit mass $ type parm,,char3,y,normref='yes' $ if(normref='YES')then $ message //' ' $ message //' baseline modes are scaled so that they give 1.0'/ ' on the diagonal of checkit' $ message //' if you want to use the unscaled mode shapes,'/ ' set param,normref,no' $ message //' ' $ smpyad testa,mmaa,testa,,,/tempa/3////1 $ diagonal tempa/scale2/'SQUARE'/2. $ square terms on diagonal diagonal scale2/scale1//.25 $ sqrt of abs(original value) PARAML TESTA//'TRAILER'/2/S,N,NDOF $ matgen ,/ident/6/ndof//ndof $ matrix of unit values trnsp scale1/scale1t $ mpyad ident,scale1t,/scale $ add testa,scale/ntest///2 $ else $ normref=no equivx testa/ntest/-1 $ endif $ $ smpyad ntest,mmaa,ntest,,,/checkit/3////1 $ MESSAGE // ' ' $ if(normref='yes')then $ message //'Normalized check of input modes (after scaling) '/ 'using reduced mass matrix' $ else $ message //'Normalized check of input modes (without scaling) '/ 'using reduced mass matrix' $ endif $ matprn checkit// $ $ smpyad pha,mmaa,ntest,,,/orthoa/3////1 $ MESSAGE // ' ' $ message //'Results of cross-orthogonality test' $ message //'Each row represents one analytical mode, each column'/ ' represents an input mode' $ if(normref='YES')then $ message //' ' $ message //' baseline modes are scaled so that they give 1.0'/ ' on the diagonal of checkit' $ message //' if you want to use the unscaled mode shapes,'/ ' set param,normref,no' $ message //' ' $ endif $ matprn orthoa// $ $ $ done $ ENDIF $ END OF MODAL ASSURANCE CRITERIA CALCULATION $ $ Write matrices out for use in post-test checking $ Once again DMIG format is used to minimize the possiblilty of errors $ matgen eqexins/intext/9/0/lusets $ umerge uset,pha,/phig/'G'/'A'/'O' $ mpyad intext,phig,/phiext/1 $ matmod phiext,eqexins,,,,/mat1,/16/1 $ $ umerge uset,testa,/testg/'G'/'A'/'O' $ mpyad intext,testg,/phiex2/1 $ matmod phiex2,eqexins,,,,/mat3,/16/1 $ $ umerge1 uset,mmaa,,,/maag/'G'/'A'/'L' $ mpyad intext,maag,/maa1/1 $ mpyad maa1,intext,/maaext $ matmod maaext,eqexins,,,,/mat2,/16/1 $ MESSAGE // ' ' $ MESSAGE //'PHIEXT (MODES) AND MAAEXT (MASS) OUTPUT AS DMIG' $ $ echoon $