$ delmodea.v707 - Alter Package $=======================================================================$ $ $ 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. $ $ $ filename - delmodea.v705 $ $ 11/03/99 - JSwan $ -Complete overhaul of alter package to improve efficiency when $ doing a restart run. Prior version would route the solution $ as if DDRMM were being used regardless. With this version $ there is no difference in DELMODEs input for a restart vs. a $ coldstart - just add the alter and the DMI,SKPMODE entries $ and go. $ $ This version also removes the "X"-set must = the "A"-set $ requirement imposed in the earlier version. $ $ delmodea.v69 - updated for v69 -- jml - 9-25-96 $ $ updated for system built on on 3-14-95 VERSION 68.2 $ $ filename - delmodea.v68 $ $ THIS ALTER PACKAGE MODIFIES THE EIGENVALUE TABLE AND MODE SHAPE MATRIX $ BY DELETING CERTAIN MODES. THE USER CONTROLS WHICH MODES TO DELETE BY $ ENTRIES ON THE DMI, SKPMODE BULK DATA ENTRIES. $ $ WARNING: THIS PROCEDURE MODIFIES THE SOLUTION OF THE PROBLEM POSED!!! $ IT IS THE RESPONSIBILITY OF THE USER TO VERIFY AND ACCEPT THE $ RESULTS OF THIS ALTERED SOLUTION. $ $ $ USER INTERFACE: $ $ 1) INCLUDE THIS ALTER IN ANY MODAL STRUCTURED SOLUTION SEQUENCE $ $ 2) ENTER A DMI MATRIX NAMED "SKPMODE" INTO THE BULK DATA SECTION. $ THIS MATRIX SELECTS WHICH MODES ARE TO BE DELETED. FIRST (ZEROETH $ RECORD) MUST HAVE MODE NUMBER OF THE HIGHEST MODE TO BE DELETED IN $ FIELD 9. TO DELETE THE "ITH" MODE, INSERT A -1.0 INTO THE "ITH" $ COLUMN OF THE MATRIX NAMED "SKPMODE". AN EXAMPLE FOLLOWS SHOWING $ CORRECT FORMAT OF DMI, SKPMODE ENTRIES TO DELETE THE 3RD AND 5TH $ MODES: $ $ FIELD: 1.....2.......3.....4.....5.....6.....7.....8.....9.....0 $ DMI SKPMODE 0 2 1 0 1 5 $ DMI SKPMODE 3 1 -1. ^ $ DMI SKPMODE 5 1 -1. | $ ^ | $ | | $ | HIGHEST MODE TO BE DELETED ---+ $ | $ +---- MODE NUMBER OF MODE TO BE DELETED $ ONE ENTRY CARD PER MODE $ $ ECHOOFF $ $ --------------------------------------- $ ---------------------------- COMPILE IFPS NOLIST NOREF $ ALTER 1 $ PUTSYS(0,192) $ $ $ $ THIS IS REQUIRED TO READ IN THE DMI MATRIX AND PASS THAT INFORMATION $ TO THE EIGENVALUE SUBDMAP. $ $ ALTER 'IFP.*IBULK.*IDMI' $ After call to ifps DMIIN IDMI,IDMINDX/SKPMODE,,,,,,,,,/ $ Read user input CALL DBSTORE SKPMODE,,,,//0/0/'DBALL'/0 $ and save for later use $ --------------------------------------- $ ---------------------------- MALTER 'CALL MODEFSRS'(1,-1) $ Just prior to call PUTSYS(1,109) $ Force execution on restart $ --------------------------------------- $ ---------------------------- COMPILE MODERS NOLIST NOREF $ ALTER 1 $ PUTSYS(0,192) $ $ $ ALTER 'READ.*KXX,MXX'(1,-1) $ Just BEFORE the READ module PARAML LAMA //'PRESENCE'////S,N,OLDLAMA $ If -1 then LAMA is missing IF(OLDLAMA=-1) THEN $ Execute READ module and $ $ following only if really $ $ calculating modes $ $ ALTER 'OFP.*LAMA.*OEIGS','' $ Remove this line, print out $ $ LAMA later on $ $ ALTER 'RETURN'(1,-1) $ Just before returning $ $ continue the if test $ $ $ This portion executed iff modes are actually calculated during this $ run (i.e. this is not a restart where the modes did not change). $ EQUIVX the normal MODERS output blocks (LAMA, PHA, MI) to temporary $ datablocks with a "FULL" prefix for later. $ $ EQUIVX PHA/FULLPHA /ALWAYS $ EQUIVX LAMA/FULLLAMA/ALWAYS $ EQUIVX MI/FULLMI /ALWAYS $ $ $ ELSE $ Otherwise get existing modes $ $ off the database TYPE DB, PHA0,LAMA0,MIS $ EQUIVX PHA0 /FULLPHA /ALWAYS $ Copy them onto "FULL" names EQUIVX LAMA0/FULLLAMA/ALWAYS $ EQUIVX MIS /FULLMI /ALWAYS $ $ $ ENDIF $ $ $ MESSAGE //' ' $ Splash page MESSAGE //' ' $ MESSAGE //' ==========================='/ '=====================================' MESSAGE //' USER INFORMATION MESSAGE -'/ ' MODE DELETION ROUTINE BEING INVOKED' $ MESSAGE //' ==========================='/ '=====================================' MESSAGE //' ' $ MESSAGE //' ' $ $ $ MESSAGE //' -THE FOLLOWING EIGENVALUE EXTRACTION TABLE SHOWS'/ ' THE ORIGINAL SET OF MODES PRIOR TO MODE REMOVAL.' IF(OLDLAMA <> -1) THEN $ MESSAGE //' THE PRESENCE OF THIS TABLE DOES NOT MEAN THAT THE'/ 'RESIDUAL STRUCTURE MODES HAVE BEEN RE-CALCULATED.' MESSAGE //' ' $ MESSAGE //' ' $ ENDIF $ $ $ IF ( NASOUT AND MODETRAK=0 ) OFP FULLLAMA// $ $ IF(OLDLAMA = -1) THEN $ MESSAGE //' -ON-THE-FLY MODE DELETION METHOD BEING USED.' MESSAGE //' (TRANSLATION: THIS IS NOT A RESTART RUN'/ ' THAT MODIFIES A PREVIOUSLY STORED SET OF MODES).' MESSAGE //' ' $ MESSAGE //' ' $ ELSE $ MESSAGE //' -RESTART RUN DETECTED - PREVIOUSLY CALCULATED MODES '/ 'STORED ON THE DATABASE WILL BE MODIFIED.' MESSAGE //' ' $ MESSAGE //' ' $ ENDIF $ $ $ LAMX, ,FULLLAMA/LAMATRIX/-1 $ Convert LAMA table --> matrix $ $ TYPE PARM,,I,N,SIZIN,NUMOLD,IDIFF,NUMDEL,GOTSKIP,CHEKSKIP $ I declare! $ $ Get SKPMODE matrix CALL DBFETCH /SKPMODE,,,,/0/0/0/0/S,GOTSKIP $ PARAML SKPMODE//'PRESENCE'////S,N,CHEKSKIP$ VERIFY SKPMODE EXISTS $ $ IF (CHEKSKIP=0) THEN $ Make sure SKPMODE is there MESSAGE //' BASED ON USER INPUT, CERTAIN EIGENVALUES/EIGENVECTORS'/ 'ARE BEING REMOVED FROM THE PROBLEM SOLUTION' $ PARAML PHA//'TRAILER'/1/S,N,NUMOLD $ Original number of modes MESSAGE //' ' $ ELSE $ Otherwise no dmi was input MESSAGE //' USER WARNING MESSAGE: MODE PARTITIONING MATRIX NOT '/ 'FOUND IN BULK DATA' $ MESSAGE //' PLEASE CHECK INPUT DECK FOR DMI, '/ 'SKPMODE ENTRIES' $ MESSAGE //' ' $ MESSAGE //' THE MODE DELETION ROUTINE CANNOT CONTINUE - NORMAL '/ 'PROBLEM SOLUTION CONTINUING WITH ALL MODES...' $ MESSAGE //' ' $ RETURN $ ENDIF $ $ $ MATPRT SKPMODE// $ Print out what user input MESSAGE //' MODE PARTITIONING MATRIX READ IN AS SHOWN ABOVE: '/ '(COLUMNS WITH -1.0 INDICATE MODES THAT WILL BE DELETED)' $ MESSAGE //' ' $ $ $ Check size of SKPMODE input PARAML SKPMODE//'TRAILER'/1/S,N,SIZIN $ # OF COLS IN SKPMODE MATRIX $ $ IF (SIZIN > NUMOLD) THEN $ ABORT IF DMI TOO BIG $ $ MESSAGE //' USER INPUT ERROR: DMI MATRIX SKPMODE INPUT INDICATES '/ 'THAT THE USER EXPECTED TO DELETE UP TO '/SIZIN/' MODES' $ MESSAGE //' (SEE FIELD 9 OF THE DMI, SKPMODE, 0'/ ',... ENTRY)' $ MESSAGE //' ' $ MESSAGE //' HOWEVER, THERE WERE ONLY'/NUMOLD/ ' MODES CALCULATED IN THE FIRST PLACE.' $ MESSAGE //' THIS ROUTINE WILL NOT ATTEMPT TO DE'/ 'LETE MORE MODES THAN ACTUALLY EXIST.' $ MESSAGE //' ' $ MESSAGE //' USER ACTION: TO USE THE MODE DELETION PROCEDURE:' $ MESSAGE //' EITHER MODIFY FIELD 9 OF THE DMI,SKPMODE,0,...'/ ' ENTRY, OR' $ MESSAGE //' ADJUST THE NUMBER OF EIGENVALUES ON THE EIGR/L'/ ' ENTRY' $ MESSAGE //' ' $ MESSAGE //' THE MODE DELETION ROUTINE CANNOT CONTINUE - NORMAL '/ 'PROBLEM SOLUTION CONTINUING WITH ALL MODES...' $ MESSAGE //' ' $ RETURN $ ENDIF $ $ $ IF (SIZIN < NUMOLD) THEN $ Expand if SKPMODE too small $ $ IDIFF=NUMOLD-SIZIN $ MESSAGE //' USER INFORMATION MESSAGE: SIZE OF DMI INPUT MATRIX '/ 'SKPMODE('/ SIZIN /') IS LESS THAN THE' $ MESSAGE //' NUMBER OF EIGENVECTORS. ROUTINE WILL ASSUME THE'/ 'LAST'/IDIFF/' MODE(S) WILL BE RETAINED' $ MESSAGE //' ' $ MESSAGE //' ' $ MATGEN ,/COLPARTN/6/NUMOLD/0/SIZIN/IDIFF $ MERGE, ,,SKPMODE,,COLPARTN,/NEWSKIP/1 $ EQUIVX NEWSKIP/SKPMODE/ALWAYS $ ENDIF $ $ $ TRNSP SKPMODE/SKIPVECT $ PARTITIONING VECTOR MATGEN ,/ROWPARTN/6/3/2/1 $ PATTERN MATRIX (001) MERGE, ,SKPMODE,,,,ROWPARTN/SKIPMATX/1/ $ EXPAND TO 3 ROWS LAMX SKIPMATX,FULLLAMA/NEWLAMA/NUMOLD $ MODIFY OLD LAMA TABLE PARTN FULLPHA,SKIPVECT,/NEWPHA,,DISCARD,/1 $ DISCARD COLS IN PHIX PARTN FULLMI,SKIPVECT,/NEWMI,,,/-1 $ Modify Modal Mass matrix MI DELETE /LAMA,PHA,MI,, $ Out with the old... EQUIVX NEWLAMA/LAMA/ALWAYS $ In with the new... EQUIVX NEWPHA/PHA/ALWAYS $ EQUIVX NEWMI /MI /ALWAYS $ $ $ PARAML PHA//'TRAILER'/1/S,N,NUMNEW $ # OF COLS IN MODE MATRIX NOW NUMDEL = NUMNEW - NUMOLD $ # OF MODES DELETED OFP LAMA// $ PRINT NEW LAMA TABLE MESSAGE //' ' $ MESSAGE //' USER INFORMATION: THE ABOVE EIGENVALUE SUMMARY TABLE HAS'/ 'HAD MODES DELETED PER USER REQUEST/INPUT' $ MESSAGE //' ' $ MESSAGE //' TOTAL NUMBER OF MODES ORIGNALLY '/ 'CALCULATED..........'/NUMOLD $ MESSAGE //' LESS NUMBER OF MODES DELETED VIA'/ ' USER ACTION........'/NUMDEL $ MESSAGE //' ================================'/ '================================' MESSAGE //' NUMBER OF MODES RETAINED FOR AN'/ 'ALYSIS..............'/NUMNEW $ MESSAGE //' ' $ MESSAGE //' PLEASE KEEP THIS IN MIND WHEN VERIFYING YOUR RESULTS.' $ MESSAGE //' ' $ MESSAGE //' ' $ $ $ ECHOON $ $ --------------------------------------- $ ----------------------------