$ $ 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 $ $ $ $ postmaca.v69 - updated for v69 -- jml - 9-25-96 $ $ $ updated for system built on on 3-14-95 VERSION 68.2 $ COMPILE USERDMAP $ ALTER 2 $ $ $ CROSS-ORTHOGONALITY calculation DMAP for SOL 103 - V68 $ $ Reads DMIG test modes and compares to calculated modes $ $ Input: PHITEST as DMIG (test modes) $ PHIEXT as DMIG (ASET modes) $ PHIEX2 as DMIG (Full model modes) $ MAAEXT as DMIG (ASET mass) $ $ Computes: MAC (modal assurance criterion) $ CHECK1 (PHIEXT(T)*MAAEXT*PHIEXT) $ CHECK2 (PHITEST(T)*MAA*PHITEST) $ ORTHOA (PHITEST(T)*MAAEXT*PHIEXT) $ TYPE PARM,,I,N,ERROR=1,MODENO=0,NULLC=-1 $ TYPE PARM,,I,N,MODNOM1,MOLEFT $ TYPE PARM,,I,Y,NULCOL=0,EVAL=1 $ TYPE PARM,,I,N,NTEST=0,NPHIA=0,IP,IT,TS,TE,ndof $ TYPE PARM,,RS,N,MAC,PSQ,TSQ,MTEMP $ TYPE PARM,,I,N,MPCF1,MPCF2,SINGLE,OMIT,REACT,NSKIP,REPEAT,NOSET $ TYPE PARM,,I,N,NOL,NOA $ TYPE PARM,,I,Y,SUBID $ GP1 GEOM1,GEOM2,,/GPLS,EQEXINS,GPDTS,CSTMS,BGPDTS,SILS,/ S,N,LUSETS/0/S,N,NOGPDT $ GP4 CASECC,GEOM4,EQEXINS,SILS,GPDTS,BGPDTS,CSTMS,,,/ RG,YSB,USETS,ASET/ LUSETs/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/V,Y,SUBID $ $ $ MODAL ASSURANCE CRITERIA $ tabprt USETs,eqexins//'uset'/1 $ tabprt gpls//'gpl'/1 $ tabpt sils// $ $ MTRXIN ,,MATPOOL,EQEXINS,SILS,/PHIEXT,MAAEXT,PHITEST,,/LUSETS/ S,N,NOPHI/S,N,NOMAA/S,N,NOTEST $ MTRXIN ,,MATPOOL,EQEXINS,SILS,/PHIEX2,,,,/LUSETS/ S,N,NOPHI2 $ $ $ CHECK FOR INPUT MATRICES $ IF (NOPHI<0) THEN $ MESSAGE //' DMAP FATAL MESSAGE - NO A-SET ANALYSIS MODES READ IN' $ MESSAGE //' USER ACTION - CHECK INPUT FILE FOR ANALYSIS MODE SHAPES' $ MESSAGE //' THE A-SET MODES ARE CALLED PHIEXT IN THE INPUT FILE' $ ERROR = -1 $ ENDIF $ $ IF (NOPHI2<0) THEN $ MESSAGE //' DMAP FATAL MESSAGE - NO FULL MODEL ANALYSIS MODES READ IN' $ MESSAGE //' USER ACTION - CHECK INPUT FILE FOR ANALYSIS MODE SHAPES' $ MESSAGE //' THE FULL MODEL MODES ARE CALLED PHIEX2 IN THE INPUT FILE' $ ENDIF $ $ IF (NOMAA<0) THEN $ MESSAGE //' DMAP FATAL MESSAGE - NO MASS MATRIX FOUND ' $ MESSAGE //' USER ACTION - CHECK INPUT FILE FOR MASS MATRIX' $ ERROR = -2 $ ENDIF $ $ IF (NOTEST<0) THEN $ MESSAGE //' DMAP FATAL MESSAGE - NO TEST MODES READ IN' $ MESSAGE //' USER ACTION - CHECK INPUT FILE FOR TEST MODES' $ ERROR = -3 $ ENDIF $ IF (ERROR < 1 ) EXIT $ $ MESSAGE //'TEST-ANALYSIS COMPARISON DMAP' $ MESSAGE // $ MESSAGE //'INPUT MATRICES HAVE BEEN READ' $ PARAML PHITEST//'TRAILER'/1/S,N,NTEST $ PARAML PHIEXT//'TRAILER'/1/S,N,NPHIA $ MESSAGE //'THERE ARE'/NTEST/' TEST MODES'/' AND'/NPHIA/ ' REDUCED MODEL MODES' $ if (nophi2>=0)then $ PARAML PHIEX2//'TRAILER'/1/S,N,NPHI2 $ MESSAGE //'THERE ARE'/NPHI2/' FULL MODEL MODES' $ endif $ $ $ REMOVE MASSLESS DOF $ MATMOD MAAEXT,,,,,/PARTNM,/12/S,N,NULLC/1 $ IF (NULLC > 0 AND NULCOL >= 0 ) THEN $ MESSAGE //'THERE ARE'/NULLC/' NULL COLUMNS IN THE MASS'/ ' MATRIX - THESE WILL BE REMOVED' $ MESSAGE //'(IF YOU DO NOT WANT NULL COLUMNS REMOVED, SET'/ ' PARAM,NULCOL,-1)' $ PARTN MAAEXT,PARTNM,/MAA,,,/-1 $ PARTN PHIEXT,,PARTNM/PHIA,,,/1 $ PARTN PHITEST,,PARTNM/TESTA,,,/1 $ If (nophi2>=0)PARTN PHIEX2,,PARTNM/PHI2,,,/1 $ ELSE $ EQUIVX MAAEXT/MAA/ALWAYS $ EQUIVX PHIEXT/PHIA/ALWAYS $ EQUIVX PHITEST/TESTA/ALWAYS $ If (nophi2>=0)EQUIVX PHIEX2/PHI2/ALWAYS $ ENDIF $ $ $ CHECK FOR 0.0 IN TEST MODES AND WARN IF FOUND $ TRNSP PHIA/PHIAT $ if (nophi2>=0)TRNSP PHI2/PHI2T $ TRNSP TESTA/TESTAT $ MATMOD TESTAT,,,,,/NOTEST,/12/S,N,NULLC/1 $ IF (NULLC > 0) THEN $ MESSAGE //'USER WARNING MESSAGE - THE TEST MODES DO NOT'/ ' CONTAIN INFORMATION FOR THE FOLLOWING'/NULLC/ 'DOF ' $ MATGPR GPLS,USETS,SILS,NOTEST//'G'/'H' $ MATMOD TESTAT,PHIAT,,,,/NOTERM,/12/S,N,NULLC/2 $ IF (NULLC > 0 ) THEN $ MESSAGE //' THE ANALYTICAL MODES DO NOT HAVE TERMS FOR THESE'/ ' DOF EITHER' $ ELSE $ MATMOD PHIAT,,,,,/NOPHIA,/12/S,N,NULLC/1 $ IF (NULLC > 0 ) THEN $ MESSAGE //' THE ANALYTICAL MODES ARE MISSING TERMS AT' ' THE FOLLOWING DOF' $ MATGPR GPLS,USETS,SILS,NOPHIA//'G'/'H' $ ENDIF $ ENDIF $ ENDIF $ MESSAGE //'MODAL ASSURANCE CRITERIA'/ ' BETWEEN TEST AND ANALYSIS' $ MESSAGE // $ IF (EVAL<-2)MATPRN PHIA// $ $ $ CALCULATE MODAL ASSURANCE CRITERIA MPYAD PHIAT,PHIA,/PHIASQ $ MPYAD TESTAT,TESTA,/TESTASQ $ if(nophi2>=0)then $ mpyad phi2t,phi2,/phi2sq $ $ MESSAGE //'MODAL ASSURANCE CALCULATION IS PERFORMED FOR '/NPHI2/ ' FULL MODEL MODES AND '/NTEST/' TEST MODES' $ $ $ LOOP ON ANALYSIS MODES $ IP = 1 $ DO WHILE (IP<=NPHI2) $ TS = IP-1 $ TE = NPHI2-IP $ MATGEN ,/PARTP2/6/NPHI2/TS/1/TE $ PARTN PHI2,PARTP2,/,,MODE2P,/1 $ PARAML PHI2SQ//'DMI'/IP/IP/S,N,PSQ2 $ $ $ 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,MODE2P,/MACM/1 $ PARAML TESTASQ//'DMI'/IT/IT/S,N,TSQ $ PARAML MACM//'DMI'/1/1/S,N,MTEMP $ MAC = MTEMP*MTEMP/(PSQ2*TSQ) $ $ MESSAGE //' FULL MODEL MODE '/IP/' COMPARED TO TEST MODE '/ IT/ ' - MAC = '/MAC $ IT = IT + 1 $ ENDDO $ IP = IP + 1 $ ENDDO $ endif $ nophi>=0 $ $ perfrom MAc for A-SET modes $ message //' ' $ message //' ' $ message //' ' $ message //' ' $ message //' ' $ MESSAGE //'MODAL ASSURANCE CALCULATION IS PERFORMED FOR '/NPHIA/ ' ANALYSIS MODES AND '/NTEST/' REDUCED MODEL MODES' $ $ $ LOOP ON ANALYSIS MODES $ IP = 1 $ DO WHILE (IP<=NPHIA) $ TS = IP-1 $ TE = NPHIA-IP $ MATGEN ,/PARTP/6/NPHIA/TS/1/TE $ PARTN PHIA,PARTP,/,,MODEP,/1 $ PARAML PHIASQ//'DMI'/IP/IP/S,N,PSQ $ $ $ LOOP ON TEST MODES $ IT = 1 $ DO WHILE (IT<=NTEST) $ TS = IT-1 $ TE = NTEST-IT $ MATGEN ,/PARTTa/6/NTEST/TS/1/TE $ PARTN TESTA,PARTTa,/,,MODETa,/1 $ MPYAD MODETa,MODEP,/MACMa/1 $ PARAML TESTASQ//'DMI'/IT/IT/S,N,TSQ $ PARAML MACMa//'DMI'/1/1/S,N,MTEMP $ MAC = MTEMP*MTEMP/(PSQ*TSQ) $ $ MESSAGE //' ANALYTICAL MODE '/IP/' COMPARED TO TEST MODE '/ IT/ ' - MAC = '/MAC $ IT = IT + 1 $ ENDDO $ IP = IP + 1 $ ENDDO $ $ $ add phiT*M*TEST $ $ $ normalize input modes to unit mass $ smpyad testa,maa,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 $ $ smpyad ntest,maa,ntest,,,/checkit/3////1 $ message //'Normalized check of input modes (after scaling) '/ 'using reduced mass matrix' $ matprn checkit// $ $ if(nophi2>=0) then $ smpyad phi2,maa,ntest,,,/ortho2/3////1 $ message //'Results of cross-orthogonality test' $ message //'Each row represents one full model mode, each column'/ ' represents an input mode' $ matprn ortho2// $ endif $ $ $ smpyad phia,maa,ntest,,,/orthoa/3////1 $ message //'Results of cross-orthogonality test' $ message //'Each row represents one analytical mode, each column'/ ' represents an input mode' $ matprn orthoa// $ $ $ done $ ENDALTER echoon $