$ $ 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. $ $ modevala.v2001 - updated 3/25/2002 to include residual vectors $ modevala.v2001 - updated 4/6/2001 to include statsub $ $ modevala.v705 -- 3-6-98 $ $ Updated April, 1999 $ updated to correct STRAINED (CSR 35882) if EVAL=-1 $ also set default value of EVAL to -2 $ $ updated for v70 6-5-97 $ echooff $ $ $ modevala.v69 - updated for v69 -- jml - 9-25-96 $ $ $ $ tested on 68.1.0 (10-19-94) $ $ DMAP ALTER TO EVALUATE THE AMOUNT OF A STATIC SOLUTION $ WHICH CAN BE REPRESENTED BY THE MODES OF A MODEL $ $ CONTROLLED BY PARAMETER EVAL - $ DEFAULT = -1 => summary output only $ IF EVAL = -2 => frations for each mode $ IF EVAL = -3 => Full output $ COMPILE MODEfsRS $ ALTER 6 TYPE PARM,,I,Y,EVAL=-2,MODENO=0 $ TYPE PARM,,I,N,MODNOM1,MOLEFT $ TYPE PARM,NDDL,I,N,LUSETS,ZUZR1 $ type db,ug $ TYPE DB,MATPOOL $ TYPE DB,ZUZR01 $ $ALTER 86 $ V66 $ALTER 89 $ V66A AND V66B $ALTER 95 $ v67 $alter 117 $ v68 alter 'return'(,-1) $ ADD CHECK FOR STATIC SOLUTION $ IF (EVAL<0) THEN $ (A0) CHECK STATIC SOLUTION MESSAGE //'CHECK FOR STATIC SOLUTION REQUESTED'/ ' CURRENTLY ONLY FOR R.S. A-SET' $ MTRXIN ,,MATPOOL,EQEXINS,SILS,/UGVEXT,,/LUSETS/s,n,gotit $ dbstatus ug//s,n,noug $ if(gotit<>1)then $ message //' no matrix ugvext found in file - trying to '/ 'find static subcases' $ if(noug<>1)then $ message //' no static subcases found either - quitting'$ exit $ else $ equivx ug/ugvext/always $ endif $ check ug else $ $ found ugvext if(noug=1)then $ append ugvext,ug/ugtot $ equivx ugtot/ugvext/always $ endif $ endif $ check ugvext $ $ have ugvext and/or ug $ IF (EVAL<-2)MATPRN UGVEXT// $ UPARTN USET,UGVEXT/STATICA,,,/'G'/'A'/'O'/1 $ $ $ CHECK QUALITY OF MODAL REPRESENTATION FOR STATIC RESULTS $ $ NOTE - MASS MATRIX IS USED FOR ECONOMY - STIFFNESS COULD BE USED $ ALSO (ASSUMPTION IS MADE THAT MODES ARE NORMALIZED TO $ UNIT MASS). IF OTHER THAN MASS MORMALIZED MASS IS USED, $ THE RESULTS MUST BE SCALED APPROPRIATELY $ SMPYAD PHSA,MSAA,STATICA,,,/PARTFAC/3////1 $ MODAL 'PART' FACTORS MESSAGE //'MATRIX PARTFAC IS A MEASURE OF THE SCALING FACTOR'/ ' FOR EACH MODE TO REPRESENT THE STATIC SOLUTION' $ MATPRN PARTFAC// $ SMPYAD STATICA,KSAA,STATICA,,,/TOTL/3////1 $ TOTAL STRAIN ENERGY ADD TOTL,/TOTAL/(.5,0.) $ DIAGONAL TOTAL/TOTALD $ MESSAGE //' TOTAL STRAIN ENERGY FOR INPUT SHAPES' $ MATPRN TOTALD// $ $ IF(EVAL<-1)THEN $ (A1) $ $ Calculate individual modal strain energy if EVAL<-1 $ TYPE PARM,,I,N,NVEC,NMODES,LOOPI,LOOPJ,ITEMP,IT2 $ TYPE PARM,,RS,N,PARTI $ TYPE PARM,,CS,N,ALPHA=(1.,0.) $ PARAML PARTFAC//'TRAILER'/1/S,N,NVEC $ PARAML PARTFAC//'TRAILER'/2/S,N,NMODES $ FILE MODECONT=APPEND $ MODAL CONTRIBUTIONS FILE BYMODE=APPEND $ FILE BYLOAD=APPEND $ LOOPJ=1 $ $ DO WHILE (LOOPJ<=NMODES) $ ROW (MODE) COUNTER $ $ GET EACH MODE AND THEN GET ITS CONTRIBUTION FOR THE STATIC SOLN $ ITEMP = LOOPJ-1 $ IT2 = NMODES-LOOPJ $ MATGEN ,/COLPART/6/NMODES/ITEMP/1/IT2 $ PARTN PHSA,COLPART,/,,MODEI,/1 $$ LOOPI = 1 $ $ DO WHILE (LOOPI<=NVEC) $ COLUMN (LOAD)COUNTER $ PARAML PARTFAC//'DMI'/LOOPI/LOOPJ/S,N,PARTI $ ALPHA = CMPLX(PARTI,0.) ADD MODEI,/TEMP/ALPHA $ APPEND TEMP,/MODECONT/2 $ $ LOOPI = LOOPI + 1 $ ENDDO $ COLUMNS (LOADS) $ LOOPJ = LOOPJ + 1 $ ENDDO $ ROWS (MODES) SMPYAD MODECONT,KSAA,MODECONT,,,/STRNBYMD/3////1 $ $ MATPRN STRNBYMD// $ ADD STRNBYMD,/STRNBYM1/(.5,0.) $ DIAGONAL STRNBYM1/STRNPRMD $ IF(EVAL<-2)MATPRN STRNPRMD// $ LOOPI = 1 $ $ SUMMARIZE RESULTS BY LOAD AND MODE $ DO WHILE (LOOPI<= NVEC) $ LOOP ON LOAD VECTORS $ ITEMP = LOOPI-1 $ IT2 = NVEC-LOOPI $ MATGEN ,/COLP/6/NVEC/ITEMP/1/IT2 $ TRNSP COLP/COLPT $ $ $ MORE THAN ONE LOAD $ LOOPJ = 1 $ DO WHILE (LOOPJ<=NMODES) $ LOOP ON MODES $ APPEND COLPT,/BYLOAD/2 $ LOOPJ = LOOPJ + 1 $ $ ENDDO $ LOOP ON MODES $ $ ELSE $ (A2) $ EQUIVX COLPT/BYLOAD/ALWAYS $ $ ENDIF $ (A2) TRNSP BYLOAD/BYLOADT $ TRNSP STRNPRMD/STRNT $ PARTN STRNT,BYLOADT,/,,ONELOAD,/1 $ CALL ONELOAD ONELOAD,TOTAL/RESULTS/NMODES/NVEC/LOOPI $------------ APPEND RESULTS,/BYMODE/2 $ $ PURGEX /BYLOAD,,,,/ALWAYS $ delete /byload $ LOOPI = LOOPI + 1 $ $ ENDDO $ LOOP ON LOADS $ IF (EVAL<-2)THEN $ (A4) MESSAGE //'RESULTS BY MODE - EACH COLUMN REPRESENTS THE FRACTION'/ ' OF THE TOTAL STRAIN ' $ MESSAGE //' ENERGY CONTRIBUTIONS OF EACH MODE FOR'/ ' THE ASSOCIATED LOADING' $ MATPRN BYMODE// $ ENDIF $ (A4) $ ENDIF $ (A1) IF(EVAL<-2)MATGPR GPLS,USET,SILS,STATICA//'H'/'A'//1.-9 $ IF(EVAL<>-2)MPYAD PHSA,PARTFAC,/NEWS $ NEWS = SUM OF PHI*PARTFAC $ IF(EVAL<-2) THEN $ (A3) ADD NEWS,STATICA/ZERO/(-1.,0.) $ FOR CHECK PURPOSES MESSAGE //'MATRIX ZERO IS THE DIFFERENCE BETWEEN THE STATIC'/ ' SOLUTION'/ ' AND THE MODAL REPRESENTATION' $ MATGPR GPLS,USET,SILS,ZERO//'H'/'A'//1.-9 $ MESSAGE //'MATRIX NEWS IS THE MODAL REPRESENTATION OF THE '/ 'STATIC SOLUTION' $ MATGPR GPLS,USET,SILS,NEWS//'H'/'A'//1.-9 $ $ ENDIF $ (A3) $ $ CALCULATE TOTAL MODAL STRAIN ENERGY ONLY (IF EVAL=-1) $ IF (EVAL=-1) THEN $ SMPYAD NEWS,KSAA,NEWS,,,/STRAINE/3////1 $ MESSAGE //'MATRIX STRAINED IS THE STRAIN ENERGY'/ 'CONTAINED IN THE MODAL REPRESENTATION'/ ' OF THE STATIC SOLUTIONS' $ DIAGONAL STRAINE/STRAIND/ $ add straind,/strained/(.5,0.) $ MATPRN STRAINED// $ ENDIF $ $ ENDIF $ (A0) $ COMPILE ONELOAD $ SUBDMAP ONELOAD INPUT,TOTAL/OUTPUT/NMODES/NVEC/LOADNO $ TYPE PARM,,I,N,NMODES,NVEC,LOOPI,LOOPJ,IT1,IT2,LOADNO $ TYPE PARM,,RS,N,TOTALI,SUBTOT,MODEI $ $ $ SUBDMAP TO TAKE THE RESULTS FOR ONE MODE AND SUMMARIZE THEM $ PARAML TOTAL//'DMI'/LOADNO/LOADNO/S,N,TOTALI $ SUBTOT = 0.0 $ LOOPI=1 $ MESSAGE //' ' $ MESSAGE //' RESULTS FOR LOADING NUMBER'/LOADNO $ MESSAGE //' ' $ MESSAGE //' STRAIN ENERGY FRACTIONS FOR EACH MODE' $ DO WHILE (LOOPI<=NMODES) $ LOOP ON MODES PARAML INPUT//'DMI'/LOOPI/1/S,N,MODEI $ SUBTOT=SUBTOT+MODEI $ MODEI = MODEI/TOTALI $ MESSAGE //' MODE NO '/LOOPI/' = '/MODEI $ LOOPI = LOOPI + 1 $ ENDDO $ MESSAGE //' ' $ MESSAGE //' TOTAL STRAIN ENERGY IN INPUT VECTOR ='/TOTALI $ MESSAGE //' TOTAL STRAIN ENERGY REPRESENTED BY MODES ='/SUBTOT $ SUBTOT = SUBTOT/TOTALI $ MESSAGE //' ' $ MESSAGE //' TOTAL FRACTION FOR ALL MODES ='/SUBTOT $ MESSAGE //' ' $ MESSAGE //' ' $ RETURN END echoon $