$ $ 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. $ $ mm44a.v2001 - 12-07-2000 , 1-22-2001, 2-26-2001 $ $ mm44a.v706 - 11-23-98 $ $ mm44a.v705 - 3-5-98 $ $ updated for v70 6-17-97 $ echooff $ $ FILE MM44A.V69 $ M. GOCKEL LAST REVISED 5 MARCH 97 $ BREADBOARD OF MULTIPLE MASS CONFIGURATION CAPABILITY $ SECOND VERSION- BUILD SUBASSEMBLY BULK DATA DECKS INTO MASS CONFIGURATION $ MATRICES, SOLVE ON ONE PASS. REPLACES MMPREP, MMSOL ALTERS OF FIRST VERSION COMPILE AESTAT $ $ $ $ AESTAT alter 1 $ putsys(0,192) $ $ PUT LOOP AROUND ENTIRE ANALYSIS ALTER 'CALL SUPER1'(,-1) $ SET UP A LOOP ON EVERYTHING TYPE PARM,NDDL,I,N,ZUZRI2 $ STORE LOOP COUNTER TYPE PARM,,I,N,II,JJ $ LOOP COUNTERS TYPE PARM,,LOGICAL,N,LASTLOOP=FALSE $ TYPE PARM,NDDL,CHAR8,N,ZUZRCH1 $ USED TO TRANSMIT MNAME FROM LOWER SUBDMAP FILE CASECC0=OVRWRT/CASECC=OVRWRT $ DO WHILE (NOT LASTLOOP) $ II = II + 1 $ ZUZRI2 = II $ALTER 31 $ BEFORE PFAERO alter 'call.*pfaero'(,-1) $ IF (II>1) JUMP NOPFA $ $ALTER 32 $ alter 'call.*pfaero' $ LABEL NOPFA $ $ALTER 52 $ BEFORE LAST CALL PRTSUM alter 'call.*prtsum'(2,-1) $ $ DELETE EVERYTHING WHICH SHOULD BE RE-MADE ON LOOP. DELETE /MFF,MLR,MLL,MRR,MLAA1 $ DELETE /MR,MLAA,MAA,MGG,MJJ $ $DELETE /MSRR,M1RL,M1RR,MSLR,MIRR $ DELETE /M1RR,plr,MIRR $ DELETE /AUG,AQG,AQMG,, $ SUPER3 OUTPUTS $ AESTATRS OUTPUTS FOLLOW. IT HAS A DO LOOP WHICH $ CHANGES QUALIFIERS BUT M2GG IS NOT ONE OF THEM DBDELETE DATABLK=(AUL,AAS,AUXTAB,PAOS,STBTAB, $ LSALL,USALL,ZZX,KALX, LSALL,USALL, $ MSLR,KAZL,M1RR,L2RR,U2RR, plr,KAZL,M1RR,L2RR,U2RR, $ K2RR,MIRR,MSRR,M1RL,KRZX,Z1ZX,KSAZX, $ kzrr,MIRR,KRZX,Z1ZX, $ kzrr,MIRR,Z1ZX,KSAZX, kzrr,MIRR,Z1ZX, $ HP,RSTAB,KAAX,KAAA,KSAA1) WHERE (WILDCARD) $ INNER LOOP OUTPUTS $ HP,RSTAB,KAAX) WHERE (WILDCARD) $ INNER LOOP OUTPUTS HP) WHERE (WILDCARD) $ INNER LOOP OUTPUTS MESSAGE //'USER INFORMATION MESSAGE. END OF PASS'/II/ ' FOR MASS CONFIGURATION '/ZUZRCH1 $ ENDDO $ END OF AESTAT ALTER $ compile aestatrs $ alter 'dbview'(,-1) $ file arlr=ovrwrt/alx=ovrwrt/amlr=ovrwrt $ file kr1zx=ovrwrt $ file rhmcf=ovrwrt/mqgplk=ovrwrt/kazr=ovrwrt $ file urlr=ovrwrt/iuxlr=ovrwrt $ file ruxlx=ovrwrt/uxax=ovrwrt/uuxax=ovrwrt $ file hp0=ovrwrt/euhm=ovrwrt/erhm=ovrwrt $ file frjx=ovrwrt/feujx=ovrwrt/ferjx=ovrwrt $ file ux=ovrwrt/uxifv=ovrwrt $ $ compile aeopu $ alter 1 $ file uerksx=ovrwrt/uergx=ovrwrt/ueuksx=ovrwrt $ file ueugx=ovrwrt/prksx=ovrwrt/prgx=ovrwrt $ file perksx=ovrwrt/pergx=ovrwrt/peuksx=ovrwrt $ file peugx=ovrwrt/pirgx=ovrwrt/piugx=ovrwrt $ $ compile aemr $ alter 1 $ file pgr=ovrwrt/par=ovrwrt $ file m1rr=ovrwrt/plr=ovrwrt $ $ COMPILE IFPL $ $ $ $ IFPL ALTER 1 $ TYPE PARM,NDDL,I,N,ZUZRI1,ZUZRI2 $ USED TO STORE SEID, AUXMID LOCALLY TYPE PARM,NDDL,I,N,ZUZR1 $ USER QUALIFIER USED TO SET PATH FOR ZUZRIJ TYPE PARM,,I,N,II $ LOOP COUNTER TYPE PARM,,I,N,NOMGG $ USED BY EMG TYPE PARM,,LOGICAL,N,SELIST $ RESEARCH TYPE PARM,,I,N,JJ,REPEATX $ LOOP COUNTER, END IDENTIFIER TYPE PARM,,LOGICAL,N,LASTLOOP=FALSE $ TYPE PARM,,LOGICAL,N,MASSCFOK $ FILE GPL=SAVE/EQEXIN=SAVE/GPDT=SAVE/CSTM=SAVE $ FILE BGPDT=SAVE/SIL=SAVE/VGF=SAVE $ LOCAL VARIANTS FILE PVT=OVRWRT/PVTX=OVRWRT $ $ALTER 45 $ BEFORE DO LOOP FOR BULK DATA SORTING alter 'do.while.*not.*lastbulk'(,-1) $ ZUZR1 = 0 $ QUALIFIER FOR ZUZRIJ ZUZRI1 = SEID $ USED TO STORE SEID ZUZRI2 = AUXMID $ USED TO STORE AUXMID $SEID = 0 $ NDDL VALUE IS -1 $PEID = 0 $ $ALTER 61 $ AFTER XSORT alter 'xsort.*nogoxsrt'(2) $ $ALTER 80 $ BEFORE SETTING QUALIFIERS FOR NEXT LOOP alter 'if.*not.*lastbulk.*then'(,-1) $ II=II+1 $ ZUZR1 = II $ SET PATH FOR ZUZRIJ ON NEXT LOOP $ALTER 87,88 $ DISABLE BLOCK OF SEID,PEID alter 'seid=-1','peid=-1' $ $ALTER 91 $ alter 'endif.*not.*lastbulk'(,-1) $ ZUZRI1 = SEID $ ZUZRI2 = AUXMID $ IF (SEID>0) THEN $ MESSAGE //'USER FATAL ERROR. SUPERELEMENTS NOT YET IMPLEMENTED'/ 'IN THIS ALTER PACKAGE. REMOVE ALL BEGIN SUPER= FILES' $ EXIT $ S.E'S PLANNED FOR LATER PHASE ENDIF $ $ALTER 92 $ BEFORE ENDDO ON XSORT alter 'enddo.*not.*lastbulk'(,-1) $ IF (LASTBULK=TRUE) THEN $ ZUZRI2 = -1 $ FLAG TO EXIT IN LATER LOOP ENDIF $ $ SEGMENT CASE CONTROL BY M2PP GROUPS $ALTER 93 $ AFTER BULK LOOP alter 'enddo.*not.*lastbulk' $ DO WHILE (NOT LASTLOOP) $ JJ = JJ+1 $ CASE XCASECC,/CASECC/'FREQ'/S,N,REPEATX $ CALL DBSTORE CASECC,,,,//JJ/0/' '/0 $ IF (REPEATX=-1) LASTLOOP=TRUE $ ENDDO $ JJ $ALTER 102 $ BEFORE AXMPR1 alter ' axmpr1 '(,-1) $ AMBS = FALSE $ GETS SET TRUE BECAUSE OF AUXMIDS $ALTER 116 $ BEFORE DO ON IFPS alter 'do.*while.*amlpfl'(,-1) $ II=0 $ RE-INITALIZE $ALTER 117 $ AFTER DO alter 'do.*while.*amlpfl' $ ZUZR1 = II $ SET PATH SEID = ZUZRI1 $ RECOVER STORED VALUES PEID = ZUZRI1 $ AUXMID = ZUZRI2 $ IF (AUXMID=-1) THEN $ MESSAGE //'USER INFORMATION MESSAGE. ALL AUXMIDS PROCESSED '/ 'SUCCESSFULLY.' $ $ JUMP AFTENDO $ ENDIF $ EXIT BRANCH DELETE /PVT,PVTX,,, $ VESTIGAL DELETE /DMI,DMINDX,,, $ VAX ERROR? $ALTER 118,127 $ PUT IN SIMULATED AMLIST(SEID,AUXMID), alter 'if.*ambs.*then','call.*ifps'(,-1) $ delete up to endif $ HAVE TWO FLAVORS OF IFPS IF (AUXMID=0) THEN $ DELETE /DTI,DTINDX,,, $ $ALTER 129 $ AFTER FIRST IFPS CALL alter 'call.*ifps' $ IF (SEID=-1) THEN $ DTIIN DTI,DTINDX/MASSCF,,,,,,,,,/S,N,MASSCFOK $ IF (NOT MASSCFOK) THEN $ MESSAGE //'UFE. DTI, MASSCF NEEDED IN BULK.' $ EXIT ENDIF $ CALL DBSTORE MASSCF,,,,//0/0/' '/0 $ ENDIF $ DELETE /GPL,EQEXIN,GPDT,CSTM,BGPDT $ DELETE /SIL,VGF,,, $ GP1 GEOM1Q,GEOM2,,GDNTAB,MEDGE,/ GPL,EQEXIN,GPDT,CSTM,BGPDT,SIL,VGF/ S,N,LUSETS/0/S,N,NOPOINTS $ FROM PHASE0, LINE 32 $ ALL OUTPUTS ARE LOCAL, BECAUSE NOT ON TYPE STATEMENTS PVT PVTX,/PVT $ ELSE $ AUXMID>0 FOLLOWS DELETE /GEOM2,,,, $ ALL -X ARE SCRATCH DATABLOCKS, NEVER READ CALL IFPS CASEXX,IBULK/BULKX,GEOM1QX,EPTX,MPTX,EDTX,DITX,DYNAMICX, GEOM2,GEOM3X,GEOM4X,MATPOOLX,AXICX,DEFUSETX,DMIX, DMINDXX,DTIX,DTINDXX,PVTXX,EDOMX,DEQATNX,DEQINDX,CONTACTX,OINTX, EPTAX,pcomptx/DBALL0/AMBS/-1/AUXMID/NOGOIFP1/NOGOXSRT/S,NOGOIFP/ $ SELIST/noxsort/app $ noxsort/app $ ENDIF $ AUXMID=0 DELETE /ECTS,ECTAS,,, $ GP2 GEOM2,EQEXIN,,GEOM2A,EPT/ ECTS,ECTAS/S,N,ACOUSTIC $ LINE 587 DELETE /EST,GEI,GPECT,VGFD,DITID $ TA1 ,,ECTS,EPT,BGPDT,SIL,,CSTM,DIT,ECTAS, EHT/EST,,GEI,GPECT,,VGFD,DITID/ LUSETS/-1/S,N,NOSIMP/1/S,N,NOGENL/0///S,N,FREQDEPS $PHASE1A, LINE 28 NOMGG=-1 $ RESET FOR LOOPING EMG EST,CSTM,MPT,DIT,,,,,DEQATN,DEQIND,BGPDT,, ECTAS,EPT,EHTA,DITID/ KELM,KDICT,MELM,MDICT,BELM,BDICT/ 0/S,N,NOMGG/0/0// COUPMASS///////////K6ROT $ SEMG, LINE 24. PURGE GPSNTS, NOK=0 EMA GPECT,MDICT,MELM,BGPDT,SIL,CSTM,,/ MJJI,/-1/1.0 $ MASS LINE 114 PURGE MDICTP, MELMP, WTMASS=1.0 CALL DBSTORE MJJI,,,,//SEID/AUXMID/' '/0 $ II = II + 1 $ALTER 162 $ alter 'enddo.*amlpfl' $ LABEL AFTENDO $ ZUZR1 = 0 $ RESET PATH COMPILE SUPER1 NOLIST NOREF $ $ BRANCH OVER COMPLETED ITEMS AFTER 1ST PASS FOR MAIN BULKS $ALTER 21 $ BEFORE CALL IFPL alter 'call.*ifpl'(,-1) $ TYPE PARM,NDDL,I,N,ZUZRI2 $ STORES LOOP COUNTER TYPE PARM,,I,N,II $ II = ZUZRI2 $ IF (II>1) JUMP NOIFPL $ $ALTER 22 $ AFTER IFPL alter 'call.*ifpl' $ LABEL NOIFPL $ DELETE /CASECC,,,, $ CALL DBFETCH /CASECC,,,,/II/0/0/0/0 $ OVERWRITE THE VERSION FROM IFPL PARAML CASECC//'PRESENCE'////S,N,DONE $ IF (DONE=-1) THEN $ MESSAGE //'UIM. ALL SUBCASES PROCESSED.' $ EXIT $ ENDIF $ $ALTER 31 $ BEFORE PHASE0 alter 'call.*phase0'(,-1) $ IF (II>1) THEN $ IF (TRUE) THEN $ TEMP $ LCGEN NOT SUPPORTED IN SOL 144 ANYWAY $ IF ( NOSLT<=0 AND NOETT<=0 ) THEN $ EQUIVX CASES/CASESX/-1 $ ELSE $ $ LCGEN CASES,SLT,ETT/CASESX/S,N,DUMMY $ LCGEN CASEs,SLT,ETT,DYNAMICs,GEOM4S/CASESX/S,N,DUMMY/APP $ ENDIF $ NOSLT JUMP NOPH0 $ ENDIF $ II $ALTER 32 $ AFTER CALL PHASE0 alter 'call.*phase0' $ LABEL NOPH0 $ COMPILE PHASE1DR NOLIST NOREF $ $ $ $ $ PHASE1DR $ BRANCH OVER COMPLETED ITEMS AFTER FIRST PASS. ASSEMBLE MASS FROM $ EXTERNAL DATABASE $ALTER 81 $ BEFORE CALL PHASE1A $ alter 'call.*phase1a'(,-1) $ TYPE PARM,NDDL,I,N,ZUZRI2 $ PASS LOOP COUNTER TYPE PARM,,I,N,II $ TYPE PARM,NDDL,CHAR8,N,ZUZRCH1 $ TRANSMIT MNAME TO MAIN SUBDMAP FILE MJJ=OVRWRT $ II = ZUZRI2 $ PARAML CASECC //'DTI'/1/141////S,N,MNAME $ M2PP SLOT ZUZRCH1 = MNAME $ MOVE THIS TO M2GG UPSTREAM CALL DBFETCH /MASSCF,,,,/0/0/0/0/0 $ CALL MMSUM MASSCF/MJJ/MNAME/SEID $ IF (II>1) EQUIVX MJJ/MGG/ALWAYS $ IF ( GRDPNT>=0 ) THEN $ GPWG BGPDTS,CSTMS,,MJJ,MEDGE,/OGPWG/ GRDPNT/WTMASS//SEID $ OFP OGPWG // $ ENDIF $ IF (II>1) THEN $ SEKR=FALSE $ SEMR = TRUE $ SELR = TRUE $ JUMP PH1B $ ENDIF $ $ALTER 82 $ after phase1a alter 'call.*phase1a' $ LABEL PH1B $ COMPILE SEMG NOLIST NOREF $ $ SKIP OVER MASS GENERATION ALTER ' EMG '(,-1) $ NOMGG = 0 $ MGG COMPUTED IN IFPL. DON'T RE-MAKE IT HERE ALTER ' EMG ' $ RESET AS EMG WOULD NOMGG = 0 $ SAYS THERE IS ONE COPY MJJ/MJJX $ $ALTER 113 $ BEFORE EMA FOR MJJX1 alter 'ema.*mdict.*melm'(2,-1) $ JUMP TEMP $ $ALTER 114 $ alter 'ema.*mdict.*melm'(2) $ LABEL TEMP $ COMPILE SEMG1 NOLIST NOREF $ $ALTER 10,13 $ DELETE GPWG, NOW DONE ELSEWHERE alter 'if.*nomgg.*then','endif.*nomgg' COMPILE MMSUM NOLIST NOREF $ SUBDMAP MMSUM MASSCF/MJJSUM/MNAME/SEID $ $ FIND THE MNAME ROW OF MASSCF. SUM UP COMPONENTS, OUTPUT AS MJJSUM TYPE PARM,,CHAR8,N,MNAME $ NAME OF MASS CONFIGURATION, IN TYPE PARM,,I,N,KK,JJ,MID,SEID $ ROW NUMBER IN, MASSID FROM TABLE OUT TYPE PARM,,RS,N,SC $ SCALE FACTOR OUT TYPE PARM,,CS,N,SCX,CZ,CU=(1.,0.) $ FOR XADD5 TYPE PARM,,LOGICAL,N,LASTLOOP $ TYPE PARM,NDDL,RS,Y,WTMASS $ TYPE PARM,,CS,N,WTMASX=(1.0,0.0) $ LOCAL VARIATION FILE MJJSUM=OVRWRT/MJJSUMZ=OVRWRT $ FILE MJJSUM=SAVE $ WTMASX = CMPLX(WTMASS) $ SEID = -1 $ REMOVE WHEN SUPERELEMENTS IMPLEMENTED JJ=1 $ CALL DBFETCH /MJJSUM,,,,/0/0/0/0/0 $ DUMMY CALL, FOR FIRST PASS THRU $ LOOP. COMES BACK PURGED DO WHILE (JJ<10) $ BUMP UP LIMIT LATER CALL DTIREAD MASSCF//S,KK/S,JJ/MNAME/S,SC/S,MID $ IF (SC=0.0) THEN $ MESSAGE //'USER INFO. MESSAGE. ALL PAIRS IN TABLE PROCESSED, '/ 'MNAME='/MNAME/' SEID='/SEID $ IF (SEID=0) SEID=-1 $ TEMP MID=0 $ DO MAIN STRUCTURE LAST. IT IS OF LARGE SIZE SC=1.0 $ LASTLOOP=TRUE ENDIF $ CALL DBFETCH /MJJI,,,,/SEID/MID/0/0/0 $ SCX = CMPLX(SC)*WTMASX $ CALL XADD5 MJJI,MJJSUM,,,/MJJSUMZ/SCX/CU/CZ/CZ/CZ $ EQUIVX MJJSUMZ/MJJSUM/ALWAYS $ IF (LASTLOOP) RETURN $ ENDDO $ RETURN $ END $ MCSUM $ FILE DTIREAD.V69 COMPILE DTIREAD NOLIST NOREF $ SUBDMAP DTIREAD MASSCF//KK/JJ/MNAME/SC/MID $ $ READ A SC,MID PAIR FROM THE KKTH ROW, JJTH PAIR OF THE INPUT TABLE $ WHERE KK IS THE ROW OF MNAME TYPE PARM,,CHAR8,N,MNAME,MNAMEI $ USED TO IDENTIFY PROPER ROW TYPE PARM,,I,N,MID,MIDI,KK,JJ,SCI $ TYPE PARM,,RS,N,SC $ TYPE PARM,,I,N,KMAX $ NUMBER OF ROWS READ FROM TABLE IF (KK=0) KK=1 $ INITALIZE IF (JJ=0) JJ=1 $ PARAML MASSCF//'PRESENCE'////S,N,NOMASSCF $ MID = 0 $ SC=0.0 $ IF (NOMASSCF=-1) RETURN $ $ SEARCH TO FIND THE PROPER ROW OF THE TABLE. $ FIRST LOOK AT MNAME(KK), TO SEE IF THIS IS THE SECOND CALL FOR THIS $ ROW. IF NOT A MATCH, GO TO KK+1 PARAML MASSCF//'DTI'/KK/1////S,N,MNAMEI $ IF (MNAME = MNAMEI) JUMP NEXTVAL $ NOW LOOK AT KK+1, ONE HIGHER THAN THE LAST TIME. $ WHEN NOT THERE, START SEARCHING FROM THE BEGINNING. KK = KK + 1 $ PARAML MASSCF//'DTI'/KK/1////S,N,MNAMEI $ JJ = 1 $ START AT FIRST WORD IF (MNAME = MNAMEI) JUMP NEXTVAL $ KMAX = 10 $ LIMIT ON NUMBER OF RECORDS ALLOWED. MAKE BIGGER LATER KK = 0 $ DO WHILE (KK