$ $ 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 $ $ $ ridgyroa.v69 - updated for v69 -- 9-25-96 $ $************************************************************* $ $ THIS ALTER WILL ADD GYROSOPIC TERMS TO MSC/NASTRAN V68 $ DYNAMIC ANALYSIS STRUCTURED SOLUTION SEQUENCES. $ THE ALTER ALLOWS THE USER TO SELECT EITHER SYNCRONOUS $ OR NONSYNCRONOUS ADDITION OF THE GYROSCOPIC TERMS. THE SYNCRONOUS $ OPTION ASSUMES THE GYROSCOPIC TERMS ARE PROPORTIONAL TO $ THE EXCITATION FREQUENCY. THE NONSYNCRONOUS OPTION ALLOWS $ THE USER TO SPECIFY THE BASE ROTATION SPEED. $ $ THE SYNCROUS AND NONSYNCRONOUS OPTIONS ARE SELECTED $ WITH THE PARAM, SYNC ENTRY. $ PARAM, SYNC, NO $ NONSYNCROUNOUS OPTION (DEFAULT), $ ALSO REQUIRES PARAM, RPM ENTRY. $ PARAM, SYNC, YES $ SYNCRONOUS OPTION, $ DOES NOT REQUIRE PARAM, RPM ENTRY. $ WITH THE SYNCRONOUS OPTION, A PARAM, RPM ENTRY SPECIFYING THE $ REVOLUTIONS PER MINUTES IS ALSO REQUIRED. THE PARAM,RPM ENTRY $ SPECIFIES THE BASE ROTATION SPEED. GYROSCOPIC TERMS CAN BE SCALED $ IN RELATION TO THIS ENTRY. $ $ IN ADDITION THE THE PARAM DATA, THE FOLLOWING INFORMATION MUST $ ALSO BE SUPPLIED ON DTI BULK DATA ENTRIES. $ DTI, RGYRO, 0 $ DTI, RGYRO, i, GRIDIDi, IPOLARi, RAXISi, SCALEi $ WHERE ONE DTI RECORD MUST BE ENTERED FOR EACH GRID LOCATION $ WHICH WILL HAVE THE ADDED GYROSCOPIC TERMS. $ GRIDID (INTEGER), LOCATION TO ADD GYROSCOPIC TERMS. $ IPOLAR (REAL), POLAR MOMENT OF INERTIA ABOUT ROTATION AXIS. $ RAXIS (INTEGER), ROTATION AXIS (GLOBAL COORDINATES): $ 1 FOR X-AXIS, 2 FOR Y-AXIS, 3 FOR Z-AXIS. $ SCALE (REAL), SCALE FACTOR OF ROTATION SPEED RELATIVE TO $ BASE ROTATION SPEED, (I.E EXCITATION FREQUENCY OR PARAM, RPM). $ $ ALL GRIDS SPECIFIED ON THE DTI ENTRY MUST BE PART OF THE RESIDUAL STRUCTURE. $ IF THE SPECIFIED GRIDS ARE NOT IN THE RESIDUAL STRUCTURE, THEN AN ERROR MESSAGE $ WILL BE ISSUED AND THE JOB TERMINATED. $ $ ALTER DEVELOPED BY DAVID BELLA, SEPTEMBER, 1994 $ $************************************************************* $ COMPILE PHASE0, SOUIN=MSCSOU, NOLIST, NOREF $ $ALTER 56 $ alter 'pvt.*pvtx' $ $ READ-IN AND CHECK USER INPUT $ CALL INPUT DTI,DTINDX/DUM/APP $ $ ENDALTER $ $ $************************************************************* $ COMPILE PHASE1DR, SOUIN=MSCSOU, NOLIST, NOREF $ $ALTER 75 $ $alter 'call.*phase1a' alter 'AFTER UPSTREAM SUPERELEMENT MATRIX AND LOAD ASSEMBLY' $ TYPE PARM,,CHAR4,Y, PRTGYRO= 'NO' $ TYPE PARM,NDDL,CHAR8,N, ZNAME $ TYPE PARM,NDDL,I,N, ZUZR1 $ TYPE DB, ZUZR11 $ $ $ GENERATE GYRO TERMS FOR RESIDUAL STRUCTURE ONLY $ IF (SEID = 0) THEN $ $ CALL GYRO EQEXINS/DUM/LUSETS $ $ IF (PRTGYRO = 'YES') THEN $ $ ZNAME= 'GYRO' $ ZUZR1= 0 $ EQUIVX ZUZR11/GYRO/ALWAYS $ MATGPR GPLS,USET0,SILS,GYRO//'G'/'G'/ $ $ ENDIF $ $ ENDIF $ $ ENDALTER $ $ $************************************************************* $ COMPILE INPUT, NOLIST, NOREF $ SUBDMAP INPUT DTI,DTINDX/DUM/APP $ $ TYPE PARM,NDDL,I,N, ZUZRI1, ZUZR1 $ TYPE PARM,NDDL,RS,N, ZUZRR1 $ TYPE PARM,NDDL,CHAR8,N, ZNAME $ TYPE PARM,,I,N, RECNO, WORDNO, NOGRID, IERR $ TYPE PARM,,RS,Y, RPM= 0.0 $ TYPE PARM,,CHAR4,Y, SYNC= 'NO' $ TYPE PARM,,CHAR8,N, APP $ $ IERR= 0 $ $ $ READ IN RGYRO DTI BULK DATA INPUT $ DTIIN DTI,DTINDX/RGYRO,,,,,,,,,/S,N,YESRGYRO $ $ $ CHECK INPUT AND PARAMETER DATA $ IF (NOT YESRGYRO) THEN $ $ MESSAGE //' ' $ MESSAGE //' ERROR: NO RGYRO TABLE INPUT.' $ MESSAGE //' ' $ IERR= -1 $ $ ENDIF $ $ IF ((APP = 'TRANRESP') AND (SYNC = 'YES')) THEN $ $ MESSAGE //' ' $ MESSAGE //' ERROR: SYNCRONOUS OPTION CANNOT BE USED IN'/ ' TRANSIENT RESPONSE,' $ MESSAGE //' USE PARAM, SYNC, NO AND INCLUDE'/ ' PARAM, RPM ENTRY ' $ MESSAGE //' OR SELECT A DIFFERENT SOLUTION TYPE.' $ MESSAGE //' ' $ IERR= -1 $ $ ENDIF $ $ IF ((SYNC = 'NO') AND (RPM = 0.0)) THEN $ $ MESSAGE //' ' $ MESSAGE //' ERROR: NONSYNCRONOUS ANALYSIS REQUESTED' $ MESSAGE //' BUT NO RPM DATA ENTERED' $ MESSAGE //' ' $ IERR= -1 $ $ ENDIF $ $ $ LOOP THROUGH TABLE INPUT $ CHECK INPUT AND SAVE GRIDID NUMBERS $ $ TABLE INPUT IS SAVED IN NDDL USER PARMETERS (ZUZRR1, ZUZRI1). $ ZNAME IDENTIFIES THE PARAMETER. $ ZUZR1 IS THE DTI RECORD OF THE INPUT. $ AN ADDITIONAL PAMAMETER IS INDEX. $ INDEX IS USED TO SORT THE GRID NUMBERS INTO ASCENDING ORDER $ IT CONTAINS THE ORIGINAL DTI RECORD OF THE INPUT. $ BY SORTING THE CONTENTS OF INDEX, ONE IS ABLE TO RETREIVE $ GRID DATA IN ASCENDING ORDER BY SETTING ZUZR1 TO THE VALUE OF INDEX. $ $ ZNAME( INDEX(I) ), WHERE I= 1, N (TOTAL NUMBER OF DTI RECORDS) $ $ FOR EXAMPLE, IF THE THIRD DTI RECORD CONTAINED THE GRID WITH THE $ LOWEST ID, THEN AFTER SORTING INDEX(1) WILL CONTAIN THE NUMBER 3. $ SETTING ZUZR1 TO INDEX(1) WILL RETRIEVE ALL DTI RECORD 3 INFORMATION. $ RECNO= 1 $ $ DO WHILE (RECNO > 0) $ $ WORDNO= 1 $ PARAML RGYRO//'DTI'/S,N,RECNO/S,N,WORDNO//S,N,GRIDID $ IF (RECNO < 0) JUMP ENDLP1 $ IF (WORDNO < 0) THEN $ $ MESSAGE //' ' $ MESSAGE //' ERROR: GRID ID (WORD # 1) NOT ENTERED ON' $ MESSAGE //' 1RGYRO RECORD # '/ RECNO $ MESSAGE //' ' $ IERR= -1 $ $ ELSE $ $ $ SET INDEX NUMBER AND SAVE GRID ID $ ZUZR1= RECNO $ ZNAME= 'INDEX' $ ZUZRI1= RECNO ZNAME= 'GRIDID' $ ZUZRI1= GRIDID $ $ ENDIF $ $ WORDNO= 2 $ PARAML RGYRO//'DTI'/S,N,RECNO/S,N,WORDNO/S,N,IPOLAR $ IF (WORDNO < 0) THEN $ $ MESSAGE //' ' $ MESSAGE //' ERROR: POLAR MOMENT (WORD # 2) NOT ENTERED ON' $ MESSAGE //' RGYRO RECORD # '/ RECNO $ MESSAGE //' ' $ IERR= -1 $ $ ELSE $ $ $ SAVE POLAR MOMENT $ ZNAME= 'IPOLAR' $ ZUZRR1= IPOLAR $ ENDIF $ $ WORDNO= 3 $ PARAML RGYRO//'DTI'/S,N,RECNO/S,N,WORDNO//S,N,RAXIS $ IF (WORDNO < 0) THEN $ $ MESSAGE //' ' $ MESSAGE //' ERROR: ROTATION DIRECTION (WORD # 3) NOT ENTERED ON' $ MESSAGE //' RGYRO RECORD # '/ RECNO $ MESSAGE //' ' $ IERR= -1 $ $ ELSE $ $ $ SAVE ROTATION DIRECTION $ IF ((RAXIS < 1) AND (RAXIS > 3)) THEN $ $ MESSAGE //' ERROR: ROTATION DIRECTION (WORD # 3) ON RGYRO' $ MESSAGE //' RECORD # '/ RECNO/' MUST BE 1, 2, OR 3' $ MESSAGE //' ' $ IERR= -1 $ $ ELSE $ $ ZNAME= 'RAXIS' $ ZUZRI1= RAXIS $ $ ENDIF $ $ ENDIF $ $ WORDNO= 4 $ PARAML RGYRO//'DTI'/S,N,RECNO/S,N,WORDNO/S,N,SCALE $ IF (WORDNO < 0) THEN $ $ MESSAGE //' ' $ MESSAGE //' ERROR: ROTATION FACTOR (WORD # 4) NOT ENTERED ON' $ MESSAGE //' RGYRO RECORD # '/ RECNO $ MESSAGE //' ' $ IERR= -1 $ $ ELSE $ $ $ SAVE ROTATION SCALE FACTOR $ ZNAME= 'SCALE' $ ZUZRR1= SCALE $ ENDIF $ $ NOGRID= RECNO $ RECNO= RECNO + 1 $ $ LABEL ENDLP1 $ $ ENDDO $ $ IF (IERR < 0) EXIT $ $ $ BUBBLE SORT GRID IDS FOR EFFICIENT PASS THROUGH EQEXIN $ CALL BUBBLE //ZUZRI1/NOGRID $ $ ZNAME= 'NOGRID' $ ZUZR1= 0 $ ZUZRI1= NOGRID $ $ RETURN $ END $ $ $************************************************************* $ COMPILE GYRO, NOLIST, NOREF $ SUBDMAP GYRO EQEXINS/DUM/LUSETS $ TYPE PARM,NDDL,I,N, ZUZRI1, ZUZR1 $ TYPE PARM,NDDL,RS,N, ZUZRR1 $ TYPE PARM,NDDL,CHAR8,N, ZNAME $ TYPE PARM,,I,N, GRIDID, STARTPOS, MIDPOS, ENDPOS, FINDPOS $ TYPE PARM,,I,N, NMAX=10 $ TYPE PARM,,I,N, I, SWORD, MWORD, EWORD, INDEX, NOGRID, IERR $ TYPE PARM,,LOGICAL,N, DOBIST $ TYPE DB, ZUZR11 $ $ $ EQEXIN TABLE MAY BE LARGE $ PERFORM MODIFIED BISECTION SEARCH FOR GRID IDS $ $ INITIALIZE LOOP PARAMETERS $ I= 1 $ STARTPOS= 1 $ PARAML EQEXINS//'TRAILER'/1/S,N,ENDPOS $ MIDPOS= (ENDPOS - STARTPOS)/2 $ FINDPOS= 0 $ ZNAME= 'NOGRID' $ ZUZR1= 0 $ NOGRID= ZUZRI1 $ $ $ FORM NULL INITIAL GYRO MATRIX $ MATGEN ,/GYRO/7/LUSETS/LUSETS $ $ DO WHILE (I <= NOGRID) $ $ $ GET GRIDID FOR SEARCH $ ZNAME= 'INDEX' $ ZUZR1= I $ INDEX= ZUZRI1 $ ZNAME= 'GRIDID' $ ZUZR1= INDEX $ GRIDID= ZUZRI1 $ $ DOBIST= TRUE $ $ DO WHILE (DOBIST) $ $ $ IF PREVIOUS GRID WAS FOUND $ CHECK TO SEE IF NEXT GRID ID WITHIN NMAX POSITIONS $ IF (FINDPOS > 0) THEN $ $ SWORD= 2*STARTPOS-1 $ EWORD= 2*(STARTPOS + NMAX)-1 $ PARAML EQEXINS//'DTI'/1/SWORD//S,N,SGRIDID $ PARAML EQEXINS//'DTI'/1/EWORD//S,N,EGRIDID $ $ IF ((GRIDID >= SGRIDID) AND (GRIDID <= EGRIDID)) THEN $ GRID IS WITHIN INTERVAL $ ENDPOS= STARTPOS + NMAX $ CALL FINDLOOP EQEXINS// GRIDID/STARTPOS/ENDPOS/S,FINDPOS/S,IERR $ DOBIST= FALSE $ $ ELSE $ $ FINDPOS= 0 $ $ ENDIF $ $ ENDIF $ $ IF (FINDPOS <= 0) THEN $ PERFORM BISECTION SEARCH $ SWORD= 2*STARTPOS-1 $ MWORD= 2*MIDPOS-1 $ EWORD= 2*ENDPOS-1 $ PARAML EQEXINS//'DTI'/1/SWORD//S,N,SGRIDID $ PARAML EQEXINS//'DTI'/1/MWORD//S,N,MGRIDID $ PARAML EQEXINS//'DTI'/1/EWORD//S,N,EGRIDID $ $ IF ((ENDPOS - STARTPOS) <= NMAX) THEN $ GRID IS WITHIN ACCEPTABLE INTERVAL $ CALL FINDLOOP EQEXINS// GRIDID/STARTPOS/ENDPOS/S,FINDPOS/S,IERR $ DOBIST= FALSE $ $ ELSE IF ((GRIDID > SGRIDID) AND (GRIDID < MGRIDID)) THEN $ GRID IS IN UPPER HALF $ ENDPOS= MIDPOS $ MIDPOS= STARTPOS + (ENDPOS - STARTPOS)/2 $ $ ELSE IF ((GRIDID > MGRIDID) AND (GRIDID < EGRIDID)) THEN $ GRID ID IN LOWER HALF $ STARTPOS= MIDPOS $ MIDPOS= STARTPOS + (ENDPOS - STARTPOS)/2 $ $ ELSE IF (GRIDID = SGRIDID) THEN $ LUCKY HIT $ FINDPOS= STARTPOS $ DOBIST= FALSE $ $ ELSE IF (GRIDID = MGRIDID) THEN $ LUCKY HIT $ FINDPOS= MIDPOS $ DOBIST= FALSE $ $ ELSE IF (GRIDID = EGRIDID) THEN $ LUCKY HIT $ FINDPOS= ENDPOS $ DOBIST= FALSE $ $ ELSE IF((GRIDID < SGRIDID) OR (GRIDID > EGRIDID)) THEN $ GRIDID IS OUT OF RANGE $ MESSAGE //' ' $ MESSAGE //' FATAL ERROR: GIDID '/GRIDID/ ' IS NOT WITHIN RANGE OF INPUT GRID IDS'/ $ MESSAGE //' ' $ DOBIST= FALSE $ IERR= -1 $ ENDIF $ $ ENDIF $ $ ENDDO $ $ IF ((FINDPOS > 0) AND (IERR >= 0)) THEN $ POSITION FOUND AND NO ERRORS $ $ MAKE GYRO TERMS FOR THIS GRID $ CALL MKGYRO EQEXINS/GYROGRID/ FINDPOS/INDEX/ZUZRI1/ZUZRR1/LUSETS $ $ $ ADD TO OTHER GRIDS $ ADD GYROGRID,GYRO/GYRONEW $ EQUIVX GYRONEW/GYRO/ALWAYS $ $ ENDIF $ $ $ SET POSITION POINTER TO BEGIN NEW SEARCH $ STARTPOS= FINDPOS + 1 $ PARAML EQEXINS//'TRAILER'/1/S,N,ENDPOS $ MIDPOS= STARTPOS + (ENDPOS-STARTPOS)/2 $ $ I= I + 1 $ $ ENDDO $ $ IF (IERR < 0) EXIT $ $ $ STORE GYRO MATRIX FOR LATER USE $ ZNAME= 'GYRO' $ ZUZR1= 0 $ EQUIVX GYRO/ZUZR11/ALWAYS $ $ RETURN $ END $ $ $************************************************************* $ COMPILE BUBBLE, NOLIST, NOREF $ SUBDMAP BUBBLE //ZUZRI1/NOGRID $ $ $ BUBBLE SORT GRID IDS $ ALL DTI INFO IS SAVE ACCORDING TO AN INDEX NUMBER $ SORTING GRIDS RESULTS IN SHUFFLING INDEX NUMBERS $ TYPE PARM,NDDL,I,N, ZUZRI1, ZUZR1 $ TYPE PARM,NDDL,CHAR8,N, ZNAME $ TYPE PARM,,I,N, NOGRID, I, J, N, INDEX, IHOLD1, IHOLD2 $ $ N= NOGRID $ I= 1 $ $ DO WHILE (I < NOGRID) $ $ J= 1 $ N= NOGRID - I $ DO WHILE (J <= N) $ $ ZNAME= 'INDEX' $ ZUZR1= J $ INDEX= ZUZRI1 $ ZNAME= 'GRIDID' $ ZUZR1= INDEX $ IHOLD1= ZUZRI1 $ $ ZNAME= 'INDEX' $ ZUZR1= J + 1 $ INDEX= ZUZRI1 $ ZNAME= 'GRIDID' $ ZUZR1= INDEX $ IHOLD2= ZUZRI1 $ $ IF (IHOLD2 < IHOLD1) THEN $ $ ZNAME= 'INDEX' $ ZUZR1= J $ IHOLD1= ZUZRI1 $ ZUZR1= J + 1 $ IHOLD2= ZUZRI1 $ ZUZRI1= IHOLD1 $ ZUZR1= J $ ZUZRI1= IHOLD2 $ $ ENDIF $ $ J= J + 1 $ $ ENDDO $ $ I= I + 1 $ $ ENDDO $ $ RETURN $ END $ $ $************************************************************* $ COMPILE FINDLOOP, NOLIST, NOREF $ SUBDMAP FINDLOOP EQEXIN// GRIDID/STARTPOS/ENDPOS/FINDPOS/IERR $ $ TYPE PARM,,I,N, GRIDID, STARTPOS, ENDPOS, FINDPOS, IERR $ TYPE PARM,,I,N, I, J $ $ I= STARTPOS $ $ DO WHILE (I <= ENDPOS) $ $ J= 2*I - 1 $ PARAML EQEXIN//'DTI'/1/J//S,N,FGRIDID $ IF (FGRIDID = GRIDID) THEN $ $ FINDPOS= I $ RETURN $ $ ENDIF $ $ I= I + 1 $ $ ENDDO $ $ IERR= -1 $ MESSAGE //' ' $ MESSAGE //' FATAL ERROR: GRID NUMBER '/GRIDID/ ' ON DTI ENTRY RGYRO NOT FOUND'/ $ MESSAGE //' ' $ $ RETURN $ END $ $ $************************************************************* $ COMPILE MKGYRO NOLIST NOREF $ SUBDMAP MKGYRO EQEXIN/GYRO/ FINDPOS/INDEX/ZUZRI1/ZUZRR1/LUSET $ $ TYPE PARM,NDDL,I,N, ZUZR1 $ TYPE PARM,NDDL,I,N, ZUZRI1 $ TYPE PARM,NDDL,RS,N, ZUZRR1 $ TYPE PARM,NDDL,CHAR8,N, ZNAME $ TYPE PARM,,I,N FINDPOS, INDEX, LUSET $ TYPE PARM,,I,N, RAXIS, IPOS2 $ TYPE PARM,,RS,N, SCALE, IPOLAR $ TYPE PARM,,CS,N, SC1, SC2 $ $ $ RETRIEVE POLAR INERTIA, ROTATION DIRECTION, AND SCALE FACTOR $ FROM DATABASE $ ZUZR1= INDEX $ ZNAME= 'IPOLAR' $ IPOLAR= ZUZRR1 $ ZNAME= 'RAXIS' $ RAXIS= ZUZRI1 $ ZNAME= 'SCALE' $ SCALE= ZUZRR1 $ $ $ FORM CORIOLIS EFFECT MATRIX $ EXAMPLE: ROTATION ABOUT GLOBAL Z-AXIS $ $ | 0 I(zz) 0 | $ | -I(zz) 0 0 | $ | 0 0 0 | $ $ VECTORS USED TO FORM MATRICES $ MATGEN ,/XPOS/6/3/0/1/2/ $ MATGEN ,/YPOS/6/3/1/1/1/ $ MATGEN ,/ZPOS/6/3/2/1/ $ MATGEN ,/NULL3/6/3/3/ $ $ $ FORM CORIOLIS MATRIX FOR ROTATIONAL TERMS $ $ FORM MATRIX TO POSITION INERTIAL TERMS $ IN OFF-DIAGONAL POSITIONS $ FILE CORIP= APPEND $ FILE CORIM= APPEND $ $ IF (RAXIS = 1) THEN $ $ COPY NULL3/CORIP/ALWAYS $ APPEND NULL3,/CORIP/2 $ APPEND YPOS,/CORIP/2 $ $ COPY NULL3/CORIM/ALWAYS $ APPEND ZPOS,/CORIM/2 $ APPEND NULL3,/CORIM/2 $ $ ELSE IF (RAXIS = 2) THEN $ $ COPY ZPOS/CORIP/ALWAYS $ APPEND NULL3,/CORIP/2 $ APPEND NULL3,/CORIP/2 $ $ COPY NULL3/CORIM/ALWAYS $ APPEND NULL3,/CORIM/2 $ APPEND XPOS,/CORIM/2 $ $ ELSE IF (RAXIS = 3) THEN $ $ COPY NULL3/CORIP/ALWAYS $ APPEND XPOS,/CORIP/2 $ APPEND NULL3,/CORIP/2 $ $ COPY YPOS/CORIM/ALWAYS $ APPEND NULL3,/CORIM/2 $ APPEND NULL3,/CORIM/2 $ $ ENDIF $ $ $ FORM GYRO MATRIX FOR THIS GRID $ SC1= CMPLX( SCALE*IPOLAR, 0.) $ SC2= -SC1 $ ADD CORIP,CORIM/CORITOT/SC1/SC2 $ $ $ INSERT GYRO MATRIX INTO COMPLETE GYRO MATRIX $ IPOS2= 2*FINDPOS $ PARAML EQEXIN//'DTI'/2/IPOS2//S,N,ISIL $ ISIL= ISIL/10 + 2 $ MATGEN ,/PART/6/LUSET/ISIL/3 $ MERGE ,,,,CORITOT,PART,/GYRO $ $ RETURN $ END $ $ $************************************************************* $ COMPILE GMA, SOUIN=MSCSOU, NOLIST, NOREF $ $ALTER 9 $ $alter 'mtrxin.*k2pp.*m2pp' alter ':AFTER X2PP MATRICES READ' $ TYPE PARM,NDDL,CHAR8,N, ZNAME $ TYPE PARM,NDDL,I,N, ZUZR1 $ TYPE PARM,,RS,Y, RPM= 0. $ TYPE PARM,,CS,N, SC1 $ TYPE PARM,,CHAR4,Y, SYNC= 'NO' $ TYPE DB, ZUZR11 $ $ $ RETRIEVE GYTRO TERMS FROM DATABASE $ ZNAME= 'GYRO' $ ZUZR1= 0 $ EQUIVX ZUZR11/GYRO/ALWAYS $ $ $ EXPAND TO P-SIZE IF NECCESSARY $ PARAML USETD//'USET'//////'E'/S,N,NOESET $ IF (NOESET > 0) THEN $ $ UMERGE1 USETD,GYRO,,,/GYROPP/'P'/'G'/'E' $ $ ELSE $ $ EQUIVX GYRO/GYROPP/ALWAYS $ $ ENDIF $ $ IF (SYNC = 'YES') THEN $ $ $ ADD TERMS TO MASS MATRIX $ SC1= CMPLX( 0.0, -1.0) $ ADD GYROPP,M2PP/M2PPNEW/SC1 $ EQUIVX M2PPNEW/M2PP/ALWAYS $ NOM2PP= 1 $ $ ELSE $ $ $ ADD TERMS TO DAMPING MATRIX $ SC1= CMPLX( PI(2.0)*RPM/60.0, 0.0) $ ADD GYROPP,B2PP/B2PPNEW/SC1 $ EQUIVX B2PPNEW/B2PP/ALWAYS $ NOB2PP= 1 $ $ ENDIF $ $ $************************************************************* $ echoon $