$ $ 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. $ $ nlgyroa.v2001 - 11-27-2000 $ echooff $ $ $ updated 8-13-99 $ $ updated July 7, 1998 - tlr $ $ added PARAM,RFORCE,i - set i to the RFORCE to be used by this alter $ the default is the first RFORCE in the sorted $ bulk data $ $ nlgyroa.v69 - updated for v69 -- 9-25-96 $ $ tested on system built on 3-14-95 VERSION 68.2 $ $*******************************************************************************$ $ ALTER FOR SOL 106 TO INCLUDE CENTRIPETAL TERMS. $ $ THE ALTER WILL ADD CENTRIPETAL TERMS TO THE TANGENT STIFFNESS MATRIX $ DURING MODES CALCULATION SPECIFIED BY THE PARAMETER NMLOOP. TO USE THIS $ ALTER THE USER MUST SUPPLY A RFORCE FOR THE RESIDUAL STRUCTURE. $ SUPERELEMENTS SHOULD NOT BE USED, THE CENTRIPETAL EFFECT OF UPSTREAM $ SUPERELEMENTS WILL NOT BE CALCULATED. $ THE COORDINATE SYSTEM REFERENCED ON THE RFORCE CARD MUST BE CENTERED ON $ THE AXIS OF ROTATION. THE GRID ID ENTRY IS IGNORED FOR THE CALCULATION $ OF THE CENTRIPETAL TERMS. THE ROTATION IS ASSUMED TO BE ABOUT THE $ REFERENCED COORDINATE SYSTEM (CID) ORIGIN, THE MAGNITUDE (A) AND ROTATION $ VECTOR COMPONENTS (N1, N2, & N3) DETERMINE THE ORIENTATION. $ $ THE PARAMETER NMLOOP SHOULD BE SET FOR THE END OF THE FIRST SUBCASE. $ $ ALTER DEVELOPED BY DAVID BELLA FOR THE MSC.Software CORPORATION, $ AUGUST, 1992. $ $*******************************************************************************$ $ compile nlstatic $ alter 'NORMAL MODES WITH NONLINEAR STIFFNESS'(,1) $message //'testing xxxxxxxxxxxxxxx' $ $ $ CALCULATE CENTRIPETAL TERMS $ CALL CENTRIP SLT,BGPDTS,EQEXINS,CSTMS,SILS,MGG, geom3/ KCJJ/ $ $ dbstatus kcjj//s,n,iskcjj $ if (iskcjj>0)then $ message //' ' $ message //' message from NLGYRO alter - ' $ message //' centripetal stiffness terms calculated' $ message //' adding into stiffness matrix for eigenvalue'/ ' solution' $ message //' ' $ matprn kcjj// $ else $ message //'dmap warning message' $ message //'no centripetal stiffness terms calculated' $ message //' ' $ endif $ $ CALL SEMR2 kcjj,GOT,USETnl,GM,,,CSTMS,BGPDTS,CASES,USET1,VGQ/ kcAA,kcFF,kcMG,kcSF,/ ERROR/NOMSET/NOSSET/NOOSET/NORC/NOQSET/NOTSET $ $ ADD CENTRIPETAL TERMS TO STIFFNESS $ alter 'call.*gma.*casesx2.*maa'(,-1) add5 kaa,kcaa,,,/kaanew $ equivx kaanew/kaa/always $ matprn kaa// $ add5 ksf,kcsf,,,/ksfnew $ equivx ksfnew/ksf/always $ add5 kmg,kcmg,,,/kmgnew $ equivx kmgnew/kmg/always $ $ $alter 'method=-1' alter 'equivx.*kllrh.*kaa'(,-1) $ add5 kllrh,kcaa,,,/klltemp $ equivx klltemp/kllrh/-1 $ $ $ ENDALTER $ $ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $ COMPILE CENTRIP $ SUBDMAP CENTRIP SLT,BGPDT,EQEXIN,CSTM,SIL,MJJ,geom3/KCEN/ $ $ $******************************************************************** $ * $ This DMAP sequence calculates Coriolis and Centripetal effect * $ matrices in global coordinates. * $ * $ For node i: * $ * $ [Bcoriolis] = 2[x]m * $ * $ [Kcentripetal] = [x][x]m * $ * $ | 0 -Omega(z) Omega(y) | * $ [x] = | Omega(z) 0 -Omega(x) | * $ | -Omega(y) Omega(x) 0 | * $ * $******************************************************************** $ TYPE PARM,,I,N,SLTRECNO,geom3rec,wordno,sid,id $ TYPE PARM,,RS,N,OMEGA $ TYPE PARM,,CS,N,N1C,N2C,N3C $ TYPE PARM,,CS,N,OMEGAC $ type parm,,i,y,rforce=-1 $ $ SEARCH FOR RFORCE ENTRY $ $tabprt geom3//'geom3'///1 $ $tabprt slt//'slt'///1 $ dbstatus slt//s,n,noslt $ if(noslt<>1)then $ message //'FATAL - FATAL - FATAL' $ message //'slt does not exist in alter - error' $ message //'run terminated by nlgyro alter' $ exit $ endif $ $ if(rforce<0)then $ $ $ take first RFORCE in SLT $ message //' ' $ message //' PARAM,RFORCE not specified, first RFORCE entry '/ 'will be used for nlgyro alter' $ message //' ' $ SLTRECNO= 1 DO WHILE ( SLTRECNO > 0 ) $ $ PARAML SLT//'DTI'/S,N,SLTRECNO/1//S,N,LTYPE/ $ IF ( (SLTRECNO <> -1 ) AND ( LTYPE = 10 ) ) THEN $ $ $ EXTRACT SPIN VECTOR FROM RFORCE CARD. $ PARAML SLT//'DTI'/SLTRECNO/4//S,N,CID/ $ PARAML SLT//'DTI'/SLTRECNO/5/S,N,RPT/ $ PARAML SLT//'DTI'/SLTRECNO/6/S,N,N1/ $ PARAML SLT//'DTI'/SLTRECNO/7/S,N,N2/ $ PARAML SLT//'DTI'/SLTRECNO/8/S,N,N3/ $ SLTRECNO = -2 $ $ ENDIF $ $ SLTRECNO = SLTRECNO + 1 $ $ ENDDO $ $ else $ $ $ param,rforce specified $ message //' ' $ message //' param,rforce specified, searching for'/ ' rforce number'/rforce $ message //' ' $ $ geom3rec=1 $ do while (geom3rec>0) $ $ message //'top of loop - geom3rec='/geom3rec $ PARAML geom3//'DTI'/s,n,geom3rec/1//S,N,ID/ $ $ message //'id ='/id/' geom3rec ='/geom3rec $ if(id=5509)then $ $ found rforce entries wordno = 4 $ do while(wordno>0) $ find rforce requested PARAML geom3//'DTI'/geom3rec/s,n,wordno//s,n,sid $ $ message //'wordno='/wordno/' sid ='/sid $ if(sid=rforce)then $ $ found correct rforce message //' ' $ message //'found requested rforce entry number'/sid $ message //' ' $ wordno = wordno + 2 $ paraml geom3//'DTI'/geom3rec/s,n,wordno//s,n,cid $ message //'cid ='/cid $ wordno = wordno + 1 $ paraml geom3//'DTI'/geom3rec/s,n,wordno/s,n,rpt $ message //'rpt ='/rpt $ wordno = wordno + 1 $ paraml geom3//'DTI'/geom3rec/s,n,wordno/s,n,n1 $ wordno = wordno + 1 $ paraml geom3//'DTI'/geom3rec/s,n,wordno/s,n,n2 $ wordno = wordno + 1 $ paraml geom3//'DTI'/geom3rec/s,n,wordno/s,n,n3 $ message //'n1,n2,n3 ='/n1/n2/n3 $ wordno = -2 $ else $ if(wordno>0)wordno = wordno + 10 $ endif $ enddo $ wordno>0 endif $ id=5509 if(geom3rec>0)geom3rec=geom3rec + 1 $ enddo $ endif $ IF ( RPT = 0. ) THEN $ $ OMEGA= 0. RETURN $ $ ENDIF $ $ $ THESE ARE NEEDED LATER ON $ MATGEN ,/I1X1/1/1/ $ MATGEN ,/I6X6/1/6/ $ $ $ CALCULATE RADIANS PER UNIT TIME $ OMEGA= 2.0 * PI(1) * RPT $ OMEGAC = CMPLX(OMEGA,0.) $ $ $ $ CREATE A COLUMN VECTOR, MJJTSUM, FROM THE DIAGONAL OF MJJD $ TO BE USED FOR PARTITIONING PURPOSES LATER $ DIAGONAL MJJ/MJJC/'COLUMN' $ $ $-------------------------------------------------------------------$ $-------------------------------------------------------------------$ $ $ CALCULATE ROTATION MATRIX IN THE CID SYSTEM $ IF (N1 <> 0.) THEN $ $ DETERMINE FACTOR FOR X-ROTATION (in CID system) $ MATGEN ,/PVC6/6/6/1/1/4 $ MATGEN ,/PVR6/6/6/2/1/3 $ MERGE ,,,,I1X1,PVC6,PVR6/ONE6X6/1/0/1 $ MPYAD ONE6X6,I6X6,ONE6X6/ROTX/1/-1 $ DELETE /PVC6,PVR6,ONE6X6,,/ $ N1C = CMPLX(N1,0.) $ ENDIF $ $ $-------------------------------------------------------------------$ $ IF (N2 <> 0.) THEN $ $ DETERMINE FACTOR FOR Y-ROTATION (in CID system) $ MATGEN ,/PVC6/6/6/2/1/3 $ MATGEN ,/PVR6/6/6/0/1/5 $ MERGE ,,,,I1X1,PVC6,PVR6/ONE6X6/1/0/1 $ MPYAD ONE6X6,I6X6,ONE6X6/ROTY/1/-1 $ DELETE /PVC6,PVR6,ONE6X6,,/ $ N2C = CMPLX(N2,0.) $ ENDIF $ $ $-------------------------------------------------------------------$ $ IF (N3 <> 0.) THEN $ $ DETERMINE FACTOR FOR Z-ROTATION (in CID system) $ MATGEN ,/PVC6/6/6/0/1/5 $ MATGEN ,/PVR6/6/6/1/1/4 $ MERGE ,,,,I1X1,PVC6,PVR6/ONE6X6/1/0/1 $ MPYAD ONE6X6,I6X6,ONE6X6/ROTZ/1/-1 $ DELETE /PVC6,PVR6,ONE6X6,,/ $ N3C = CMPLX(N3,0.) $ ENDIF $ $ $-------------------------------------------------------------------$ $ $ ADD FOR TOTAL ROTATION (in CID system) $ ADD5 ROTX,ROTY,ROTZ,,/ROTTOT/N1C/N2C/N3C $ $ $-------------------------------------------------------------------$ $-------------------------------------------------------------------$ $ $ GENERATE G-SIZE CORIOLIS MATRIX IN THE GLOBAL SYSTEM $ $ $ FIRST, GENERATE G-SIZE MATRIX IN THE CID SYSTEM $ ADD ROTTOT,/OMEGA/OMEGAC $ MATMOD OMEGA,SIL,,,,/OMEGAGG,/5 $ $ $-------------------------------------------------------------------$ $ $ USE THE MJJC VECTOR TO PARTITION OUT THE ZERO MASS TERMS $ ALONG WITH THE SPOINTS (WHICH CAUSE PROBLEMS FOR MATMOD OPTION 5) $ PARTN OMEGAGG,MJJC,/,,,OMEGAXX/ $ $ $-------------------------------------------------------------------$ $ $ TRANSFORM CORIOLIS ACCELERATION MATRIX TO GLOBAL SYSTEM $ FIRST, TRANSFORM FROM CID TO BASIC $ THEN , TRANSFORM FROM BASIC TO GLOBAL $ $ CHECK IF THE CSTM EXISTS. IT WILL NOT EXIT IF THE GLOBAL SYSTEM $ IS THE SAME AS THE BASIC SYSTEM. ERROR IN MATMOD. THEREFORE $ GENERATE THE IDENTITY MATRIX $ $ PARAML CSTM//'PRESENCE'////S,N,NOCSTM=0 $ IF (NOCSTM < 0) THEN DIAGONAL MJJ/CTOG/'SQUARE'/0.0 $ ELSE MATMOD CSTM,SIL,BGPDT,,,/GTOB,/5//-1 $ $ $ CHECK IF THE CID IS EQUAL TO ZERO (BASIC) $ IF (CID = 0) THEN $ TRNSP GTOB/CTOG $ ELSE $ MATMOD CSTM,SIL,BGPDT,,,/CTOB,/5//CID $ MPYAD GTOB,CTOB,/CTOG/1 $ ENDIF $ ENDIF $ $ $ USE THE MJJC VECTOR TO PARTITION OUT THE ZERO MASS TERMS $ ALONG WITH THE SPOINTS (WHICH CAUSE PROBLEMS FOR MATMOD OPTION 5) $ PARTN CTOG,MJJC,/,,,CTOGX/ $ $ SMPYAD CTOGX,OMEGAXX,CTOGX,,,/OMEGAYY/3////1 $ MERGE ,,,,OMEGAYY,MJJC,/OMEGAGGX/ $ $ $-------------------------------------------------------------------$ $-------------------------------------------------------------------$ $ $ CALCULATE CENTRIPETAL ACCELERATION MATRIX $ $ MULTIPLY MASS BY CENTRIPETAL ACCELERATION $ TO CALCULATE CETRIPETAL FORCE MATRIX $ SMPYAD OMEGAGGX,MJJ,OMEGAGGX,,,/KCEN/3////////6 $ $ RETURN $ END $ $ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ echooff $