diff --git a/docs/OtherSupporting/OutListParameters.xlsx b/docs/OtherSupporting/OutListParameters.xlsx index 6828ce34bf..fc99711d04 100644 Binary files a/docs/OtherSupporting/OutListParameters.xlsx and b/docs/OtherSupporting/OutListParameters.xlsx differ diff --git a/docs/conf.py b/docs/conf.py index 0f2d012146..f6f29f1b11 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -72,6 +72,7 @@ def runDoxygen(sourcfile, doxyfileIn, doxyfileOut): 'source/user/aerodyn-aeroacoustics/references.bib', 'source/user/aerodyn-olaf/bibliography.bib', 'source/user/aerodyn/bibliography.bib', + 'source/user/elastodyn/bibliography.bib', 'source/user/beamdyn/references.bib', 'source/user/extptfm/bibliography.bib', 'source/user/fast.farm/bibliography.bib', diff --git a/docs/source/user/elastodyn/bibliography.bib b/docs/source/user/elastodyn/bibliography.bib new file mode 100644 index 0000000000..e6c7d35319 --- /dev/null +++ b/docs/source/user/elastodyn/bibliography.bib @@ -0,0 +1,6 @@ +@techreport{ed-hammam2023, + title={Modeling the Yaw Behavior of Tail Fins for Small Wind Turbines: November 22, 2021-May 21, 2024}, + author={Hammam, Mohamed M and Wood, David and Summerville, Brent}, + year={2023}, + institution={National Renewable Energy Laboratory (NREL), Golden, CO (United States)} +} diff --git a/docs/source/user/elastodyn/figs/YawFrictionModel.jpg b/docs/source/user/elastodyn/figs/YawFrictionModel.jpg new file mode 100644 index 0000000000..aa39021ee7 Binary files /dev/null and b/docs/source/user/elastodyn/figs/YawFrictionModel.jpg differ diff --git a/docs/source/user/elastodyn/index.rst b/docs/source/user/elastodyn/index.rst index c95aecd402..6b65d36e8e 100644 --- a/docs/source/user/elastodyn/index.rst +++ b/docs/source/user/elastodyn/index.rst @@ -58,3 +58,4 @@ equations of FAST v7 and the ElastoDyn module of FAST v8 and OpenFAST. coordsys.rst input.rst theory.rst + zrefs.rst diff --git a/docs/source/user/elastodyn/input.rst b/docs/source/user/elastodyn/input.rst index 97d1651845..a9f2fec2de 100644 --- a/docs/source/user/elastodyn/input.rst +++ b/docs/source/user/elastodyn/input.rst @@ -231,6 +231,17 @@ Rotor-Teeter **TeetHSSp** - Rotor-teeter hard-stop linear-spring constant (N-m/rad) [used only for 2 blades and when TeetMod=1] +Yaw-Friction +~~~~~~~~~~~~ + +**YawFrctMod** - Yaw-friction model {0: none, 1: friction without Fz term at the yaw bearing, 2: friction includes Fz term at yaw bearing, 3: user defined model} + +**M_CSmax** - Maximum Coulomb friction torque (N-m)[mu_s*D_eff when YawFrctMod=1 and Fz*mu_s*D_eff when YawFrctMod=2] + +**M_CD** - Dynamic friction moment at null yaw rate (N-m) [mu_d*D_eff when YawFrctMod=1 and Fz*mu_d*D_eff when YawFrctMod=2] + +**sig_v** - Viscous friction coefficient (N-m/(rad/s)) + Drivetrain ~~~~~~~~~~ diff --git a/docs/source/user/elastodyn/theory.rst b/docs/source/user/elastodyn/theory.rst index f687277333..3474835f05 100644 --- a/docs/source/user/elastodyn/theory.rst +++ b/docs/source/user/elastodyn/theory.rst @@ -159,7 +159,41 @@ The total moment on the given degree of freedom is: +.. _ed_yawfriction_theory: +Yaw-friction +------------ +A yaw-friction model is implemented in ElastoDyn based on a Coulomb-viscous approach. +The yaw-friction moment as a function of yaw rate (:math:`\omega`) is shown below in :numref:`figYawFriction` + +.. _figYawFriction: +.. figure:: figs/YawFrictionModel.jpg + :width: 60% + + Yaw-friction model + +The yaw-friction torque :math:`M_f` can be calcualated as follows. + +if :math:`\omega\neq0`: + +.. math:: + M_f = \mu_d\bar{D}\times\text{min}(0,F_z)\times\text{sign}(\omega) - \sigma_v\times\omega + +if :math:`\omega=0` and :math:`\dot{\omega}\neq 0`: + +.. math:: + M_f = \mu_d\bar{D}\times\text{min}(0,F_z)\times\text{sign}(\dot{\omega}) + +if :math:`\omega=0` and :math:`\dot{\omega}=0`: + +.. math:: + M_f = -\text{min}(\mu_s\bar{D}\times|\text{min}(0,F_z)|,|M_z|)\times\text{sign}(M_z) + + +where :math:`\bar{D}` is the effective yaw-bearing race diameter, :math:`\mu_d` is the dynamic friction coefficient, :math:`\mu_s` is the static friction coefficient, :math:`F_z` is effective axial load on yaw-bearing, :math:`M-z` is the external torque on yaw-bearing. +The static 'stiction' (where the static contribution exceeds the dynamic Coulomb friction) is only applied if both the yaw rotational velocity and acceleration at the current time-step are zero. +The static portion of the friction is omitted if the rotational acceleration is not null, (sign(0) is taken as 1). +This is to account for the fact that a 'warm' joint may not feel stiction when crossing through zero velocity in a dynamic sense :cite:`ed-hammam2023` .. _ed_dev_notes: diff --git a/docs/source/user/elastodyn/zrefs.rst b/docs/source/user/elastodyn/zrefs.rst new file mode 100644 index 0000000000..afb6844d57 --- /dev/null +++ b/docs/source/user/elastodyn/zrefs.rst @@ -0,0 +1,9 @@ +.. only:: html + + References + ---------- + +.. bibliography:: bibliography.bib + :labelprefix: ed- + + diff --git a/modules/elastodyn/src/ED_UserSubs.f90 b/modules/elastodyn/src/ED_UserSubs.f90 index de368c02eb..47e2abd8fd 100644 --- a/modules/elastodyn/src/ED_UserSubs.f90 +++ b/modules/elastodyn/src/ED_UserSubs.f90 @@ -101,6 +101,35 @@ SUBROUTINE UserTeet ( TeetDef, TeetRate, ZTime, DirRoot, TeetMom ) RETURN END SUBROUTINE UserTeet !======================================================================= +SUBROUTINE UserYawFrict ( ZTime, Fz, Mzz, Omg, OmgDot, DirRoot, YawFriMf ) + + ! This is a dummy routine for holding the place of a user-specified + ! Yaw Friction. Modify this code to create your own device. + + +USE Precision + + +IMPLICIT NONE + + + ! Passed Variables: +REAL(DbKi), INTENT(IN ) :: ZTime ! Current simulation time, sec. +REAL(R8Ki), INTENT(IN ) :: Fz, Mzz ! Yaw Bering normal force (positive if upward) and torque, N and N*m +REAL(R8Ki), INTENT(IN ) :: Omg ! Yaw rotational speed, rad/s. +REAL(R8Ki), INTENT(IN ) :: OmgDot ! Yaw rotational acceleration, rad/s^2. + +CHARACTER(1024), INTENT(IN ) :: DirRoot ! The name of the root file including the full path to the current working directory. This may be useful if you want this routine to write a permanent record of what it does to be stored with the simulation results: the results should be stored in a file whose name (including path) is generated by appending any suitable extension to DirRoot. + +REAL(ReKi), INTENT(OUT) :: YawFriMf ! Yaw friction moment, N*m. + + + +YawFriMf = 0.0 + +RETURN +END SUBROUTINE UserYawFrict +!======================================================================= SUBROUTINE UserTFrl ( TFrlDef, TFrlRate, ZTime, DirRoot, TFrlMom ) diff --git a/modules/elastodyn/src/ElastoDyn.f90 b/modules/elastodyn/src/ElastoDyn.f90 index 021eedaa85..4fc2f01560 100644 --- a/modules/elastodyn/src/ElastoDyn.f90 +++ b/modules/elastodyn/src/ElastoDyn.f90 @@ -1224,7 +1224,12 @@ SUBROUTINE ED_CalcOutput( t, u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) m%AllOuts( YawBrMzn) = DOT_PRODUCT( MomBNcRt, m%CoordSys%d2 ) m%AllOuts( YawBrMxp) = DOT_PRODUCT( MomBNcRt, m%CoordSys%b1 ) m%AllOuts( YawBrMyp) = -DOT_PRODUCT( MomBNcRt, m%CoordSys%b3 ) - + m%AllOuts(YawFriMom) = OtherState%Mfhat*0.001_ReKi !KBF add YawFricMom as an output based on HSSBrTq (kN-m) + m%AllOuts(YawFriMfp) = OtherState%YawFriMfp*0.001_ReKi + m%AllOuts(YawFriMz) = m%YawFriMz*0.001_ReKi + m%FrcONcRt = m%AllOuts( YawBrFzn)*1000_ReKi + m%AllOuts(OmegaYF) = OtherState%OmegaTn*R2D + m%AllOuts(dOmegaYF) = OtherState%OmegaDotTn*R2D ! Tower Base Loads: @@ -1956,6 +1961,9 @@ SUBROUTINE ED_CalcContStateDeriv( t, u, p, x, xd, z, OtherState, m, dxdt, ErrSta INTEGER(IntKi) :: ErrStat2 ! The error status code CHARACTER(ErrMsgLen) :: ErrMsg2 ! The error message, if an error occurred CHARACTER(*), PARAMETER :: RoutineName = 'ED_CalcContStateDeriv' + Real(R8Ki) :: YawFriMz ! Loops through some or all of the DOFs. + Real(R8Ki) :: Fz ! Loops through some or all of the DOFs. + ! Initialize ErrStat @@ -1993,6 +2001,13 @@ SUBROUTINE ED_CalcContStateDeriv( t, u, p, x, xd, z, OtherState, m, dxdt, ErrSta CALL Teeter ( t, p, m%RtHS%TeetAng, m%RtHS%TeetAngVel, m%RtHS%TeetMom ) ! Compute moment from teeter springs and dampers, TeetMom; NOTE: TeetMom will be zero for a 3-blader since TeetAng = TeetAngVel = 0 CALL RFurling( t, p, x%QT(DOF_RFrl), x%QDT(DOF_RFrl), m%RtHS%RFrlMom ) ! Compute moment from rotor-furl springs and dampers, RFrlMom CALL TFurling( t, p, x%QT(DOF_TFrl), x%QDT(DOF_TFrl), m%RtHS%TFrlMom ) ! Compute moment from tail-furl springs and dampers, TFrlMom + ! Compute the yaw friction torque + Fz= m%FrcONcRt !YawBrFzn force from CalcOutput + YawFriMz=DOT_PRODUCT( m%RtHS%MomBNcRtt, m%CoordSys%d2 ) + u%YawMom + m%YawFriMz = YawFriMz + + CALL YawFriction( t, p, Fz, YawFriMz, OtherState%OmegaTn, OtherState%OmegaDotTn, m%RtHS%YawFriMom ) !Compute yaw Friction #RRD + !bjj: note m%RtHS%GBoxEffFac needed in OtherState only to fix HSSBrTrq (and used in FillAugMat) m%RtHS%GBoxEffFac = p%GBoxEff**OtherState%SgnPrvLSTQ ! = GBoxEff if SgnPrvLSTQ = 1 OR 1/GBoxEff if SgnPrvLSTQ = -1 @@ -3545,6 +3560,11 @@ SUBROUTINE SetPrimaryParameters( InitInp, p, InputFileData, ErrStat, ErrMsg ) p%TeetHSSp = 0.0 END IF + p%YawFrctMod = InputFileData%YawFrctMod + p%M_CD = InputFileData%M_CD + p%M_CSmax = InputFileData%M_CSmax + p%sig_v = InputFileData%sig_v + CALL AllocAry( p%TipMass, p%NumBl, 'TipMass', ErrStat, ErrMsg ) IF ( ErrStat >= AbortErrLev ) RETURN @@ -3908,6 +3928,10 @@ SUBROUTINE Init_MiscOtherStates( m, OtherState, p, x, InputFileData, ErrStat, Er OtherState%HSSBrTrqC = 0.0_ReKi OtherState%SgnPrvLSTQ = 1 OtherState%SgnLSTQ = 1 + OtherState%OmegaTn = 0.0_R8Ki + OtherState%OmegaDotTn = 0.0_R8Ki + OtherState%Mfhat = 0.0_ReKi + OtherState%YawFriMfp = 0.0_ReKi END SUBROUTINE Init_MiscOtherStates @@ -3925,393 +3949,400 @@ END SUBROUTINE Init_MiscOtherStates !! the sign is set to 0 if the channel is invalid. !! It sets assumes the value p%NumOuts has been set before this routine has been called, and it sets the values of p%OutParam here. !! -!! This routine was generated by Write_ChckOutLst.m using the parameters listed in OutListParameters.xlsx at 25-Jan-2021 13:23:51. +!! This routine was generated by Write_ChckOutLst.m using the parameters listed in OutListParameters.xlsx. SUBROUTINE SetOutParam(OutList, p, ErrStat, ErrMsg ) !.................................................................................................................................. - + IMPLICIT NONE - + ! Passed variables - - CHARACTER(ChanLen), INTENT(IN) :: OutList(:) !< The list out user-requested outputs + + CHARACTER(ChanLen), INTENT(IN) :: OutList(:) !< The list of user-requested outputs TYPE(ED_ParameterType), INTENT(INOUT) :: p !< The module parameters INTEGER(IntKi), INTENT(OUT) :: ErrStat !< The error status code CHARACTER(*), INTENT(OUT) :: ErrMsg !< The error message, if an error occurred - + ! Local variables - + INTEGER :: ErrStat2 ! temporary (local) error status INTEGER :: I ! Generic loop-counting index INTEGER :: J ! Generic loop-counting index INTEGER :: INDX ! Index for valid arrays INTEGER :: startIndx ! Index for using BeamDyn for Blades - - LOGICAL :: CheckOutListAgain ! Flag used to determine if output parameter starting with "M" is valid (or the negative of another parameter) LOGICAL :: InvalidOutput(0:MaxOutPts) ! This array determines if the output channel is valid for this configuration - CHARACTER(ChanLen) :: OutListTmp ! A string to temporarily hold OutList(I) CHARACTER(*), PARAMETER :: RoutineName = "SetOutParam" - - CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry(1110) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry(1115) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically "AZIMUTH ","BLDPITCH1 ","BLDPITCH2 ","BLDPITCH3 ","BLPITCH1 ","BLPITCH2 ","BLPITCH3 ", & - "GENACCEL ","GENSPEED ","HSSBRTQ ","HSSHFTA ","HSSHFTPWR ","HSSHFTTQ ","HSSHFTV ", & - "IPDEFL1 ","IPDEFL2 ","IPDEFL3 ","LSSGAGA ","LSSGAGAXA ","LSSGAGAXS ","LSSGAGFXA ", & - "LSSGAGFXS ","LSSGAGFYA ","LSSGAGFYS ","LSSGAGFZA ","LSSGAGFZS ","LSSGAGMXA ","LSSGAGMXS ", & - "LSSGAGMYA ","LSSGAGMYS ","LSSGAGMZA ","LSSGAGMZS ","LSSGAGP ","LSSGAGPXA ","LSSGAGPXS ", & - "LSSGAGV ","LSSGAGVXA ","LSSGAGVXS ","LSSHFTFXA ","LSSHFTFXS ","LSSHFTFYA ","LSSHFTFYS ", & - "LSSHFTFZA ","LSSHFTFZS ","LSSHFTMXA ","LSSHFTMXS ","LSSHFTPWR ","LSSHFTTQ ","LSSTIPA ", & - "LSSTIPAXA ","LSSTIPAXS ","LSSTIPMYA ","LSSTIPMYS ","LSSTIPMZA ","LSSTIPMZS ","LSSTIPP ", & - "LSSTIPPXA ","LSSTIPPXS ","LSSTIPV ","LSSTIPVXA ","LSSTIPVXS ","NACYAW ","NACYAWA ", & - "NACYAWP ","NACYAWV ","NCIMURAXS ","NCIMURAYS ","NCIMURAZS ","NCIMURVXS ","NCIMURVYS ", & - "NCIMURVZS ","NCIMUTAGXS","NCIMUTAGYS","NCIMUTAGZS","NCIMUTAXS ","NCIMUTAYS ","NCIMUTAZS ", & - "NCIMUTVXS ","NCIMUTVYS ","NCIMUTVZS ","OOPDEFL1 ","OOPDEFL2 ","OOPDEFL3 ","PTCHDEFL1 ", & - "PTCHDEFL2 ","PTCHDEFL3 ","PTCHPMZB1 ","PTCHPMZB2 ","PTCHPMZB3 ","PTCHPMZC1 ","PTCHPMZC2 ", & - "PTCHPMZC3 ","PTFMHEAVE ","PTFMPITCH ","PTFMRAXI ","PTFMRAXT ","PTFMRAYI ","PTFMRAYT ", & - "PTFMRAZI ","PTFMRAZT ","PTFMRDXI ","PTFMRDYI ","PTFMRDZI ","PTFMROLL ","PTFMRVXI ", & - "PTFMRVXT ","PTFMRVYI ","PTFMRVYT ","PTFMRVZI ","PTFMRVZT ","PTFMSURGE ","PTFMSWAY ", & - "PTFMTAGXI ","PTFMTAGXT ","PTFMTAGYI ","PTFMTAGYT ","PTFMTAGZI ","PTFMTAGZT ","PTFMTAXI ", & - "PTFMTAXT ","PTFMTAYI ","PTFMTAYT ","PTFMTAZI ","PTFMTAZT ","PTFMTDXI ","PTFMTDXT ", & - "PTFMTDYI ","PTFMTDYT ","PTFMTDZI ","PTFMTDZT ","PTFMTVXI ","PTFMTVXT ","PTFMTVYI ", & - "PTFMTVYT ","PTFMTVZI ","PTFMTVZT ","PTFMYAW ","QD2_B1E1 ","QD2_B1F1 ","QD2_B1F2 ", & - "QD2_B2E1 ","QD2_B2F1 ","QD2_B2F2 ","QD2_B3E1 ","QD2_B3F1 ","QD2_B3F2 ","QD2_DRTR ", & - "QD2_GEAZ ","QD2_HV ","QD2_P ","QD2_R ","QD2_RFRL ","QD2_SG ","QD2_SW ", & - "QD2_TEET ","QD2_TFA1 ","QD2_TFA2 ","QD2_TFRL ","QD2_TSS1 ","QD2_TSS2 ","QD2_Y ", & - "QD2_YAW ","QD_B1E1 ","QD_B1F1 ","QD_B1F2 ","QD_B2E1 ","QD_B2F1 ","QD_B2F2 ", & - "QD_B3E1 ","QD_B3F1 ","QD_B3F2 ","QD_DRTR ","QD_GEAZ ","QD_HV ","QD_P ", & - "QD_R ","QD_RFRL ","QD_SG ","QD_SW ","QD_TEET ","QD_TFA1 ","QD_TFA2 ", & - "QD_TFRL ","QD_TSS1 ","QD_TSS2 ","QD_Y ","QD_YAW ","Q_B1E1 ","Q_B1F1 ", & - "Q_B1F2 ","Q_B2E1 ","Q_B2F1 ","Q_B2F2 ","Q_B3E1 ","Q_B3F1 ","Q_B3F2 ", & - "Q_DRTR ","Q_GEAZ ","Q_HV ","Q_P ","Q_R ","Q_RFRL ","Q_SG ", & - "Q_SW ","Q_TEET ","Q_TFA1 ","Q_TFA2 ","Q_TFRL ","Q_TSS1 ","Q_TSS2 ", & - "Q_Y ","Q_YAW ","RFRLBRM ","ROLLDEFL1 ","ROLLDEFL2 ","ROLLDEFL3 ","ROOTFXB1 ", & - "ROOTFXB2 ","ROOTFXB3 ","ROOTFXC1 ","ROOTFXC2 ","ROOTFXC3 ","ROOTFYB1 ","ROOTFYB2 ", & - "ROOTFYB3 ","ROOTFYC1 ","ROOTFYC2 ","ROOTFYC3 ","ROOTFZB1 ","ROOTFZB2 ","ROOTFZB3 ", & - "ROOTFZC1 ","ROOTFZC2 ","ROOTFZC3 ","ROOTMEDG1 ","ROOTMEDG2 ","ROOTMEDG3 ","ROOTMFLP1 ", & - "ROOTMFLP2 ","ROOTMFLP3 ","ROOTMIP1 ","ROOTMIP2 ","ROOTMIP3 ","ROOTMOOP1 ","ROOTMOOP2 ", & - "ROOTMOOP3 ","ROOTMXB1 ","ROOTMXB2 ","ROOTMXB3 ","ROOTMXC1 ","ROOTMXC2 ","ROOTMXC3 ", & - "ROOTMYB1 ","ROOTMYB2 ","ROOTMYB3 ","ROOTMYC1 ","ROOTMYC2 ","ROOTMYC3 ","ROOTMZB1 ", & - "ROOTMZB2 ","ROOTMZB3 ","ROOTMZC1 ","ROOTMZC2 ","ROOTMZC3 ","ROTACCEL ","ROTFURL ", & - "ROTFURLA ","ROTFURLP ","ROTFURLV ","ROTPWR ","ROTSPEED ","ROTTEETA ","ROTTEETP ", & - "ROTTEETV ","ROTTHRUST ","ROTTORQ ","SPN1ALGXB1","SPN1ALGXB2","SPN1ALGXB3","SPN1ALGYB1", & - "SPN1ALGYB2","SPN1ALGYB3","SPN1ALGZB1","SPN1ALGZB2","SPN1ALGZB3","SPN1ALXB1 ","SPN1ALXB2 ", & - "SPN1ALXB3 ","SPN1ALYB1 ","SPN1ALYB2 ","SPN1ALYB3 ","SPN1ALZB1 ","SPN1ALZB2 ","SPN1ALZB3 ", & - "SPN1FLXB1 ","SPN1FLXB2 ","SPN1FLXB3 ","SPN1FLYB1 ","SPN1FLYB2 ","SPN1FLYB3 ","SPN1FLZB1 ", & - "SPN1FLZB2 ","SPN1FLZB3 ","SPN1MLXB1 ","SPN1MLXB2 ","SPN1MLXB3 ","SPN1MLYB1 ","SPN1MLYB2 ", & - "SPN1MLYB3 ","SPN1MLZB1 ","SPN1MLZB2 ","SPN1MLZB3 ","SPN1RDXB1 ","SPN1RDXB2 ","SPN1RDXB3 ", & - "SPN1RDYB1 ","SPN1RDYB2 ","SPN1RDYB3 ","SPN1RDZB1 ","SPN1RDZB2 ","SPN1RDZB3 ","SPN1TDXB1 ", & - "SPN1TDXB2 ","SPN1TDXB3 ","SPN1TDYB1 ","SPN1TDYB2 ","SPN1TDYB3 ","SPN1TDZB1 ","SPN1TDZB2 ", & - "SPN1TDZB3 ","SPN2ALGXB1","SPN2ALGXB2","SPN2ALGXB3","SPN2ALGYB1","SPN2ALGYB2","SPN2ALGYB3", & - "SPN2ALGZB1","SPN2ALGZB2","SPN2ALGZB3","SPN2ALXB1 ","SPN2ALXB2 ","SPN2ALXB3 ","SPN2ALYB1 ", & - "SPN2ALYB2 ","SPN2ALYB3 ","SPN2ALZB1 ","SPN2ALZB2 ","SPN2ALZB3 ","SPN2FLXB1 ","SPN2FLXB2 ", & - "SPN2FLXB3 ","SPN2FLYB1 ","SPN2FLYB2 ","SPN2FLYB3 ","SPN2FLZB1 ","SPN2FLZB2 ","SPN2FLZB3 ", & - "SPN2MLXB1 ","SPN2MLXB2 ","SPN2MLXB3 ","SPN2MLYB1 ","SPN2MLYB2 ","SPN2MLYB3 ","SPN2MLZB1 ", & - "SPN2MLZB2 ","SPN2MLZB3 ","SPN2RDXB1 ","SPN2RDXB2 ","SPN2RDXB3 ","SPN2RDYB1 ","SPN2RDYB2 ", & - "SPN2RDYB3 ","SPN2RDZB1 ","SPN2RDZB2 ","SPN2RDZB3 ","SPN2TDXB1 ","SPN2TDXB2 ","SPN2TDXB3 ", & - "SPN2TDYB1 ","SPN2TDYB2 ","SPN2TDYB3 ","SPN2TDZB1 ","SPN2TDZB2 ","SPN2TDZB3 ","SPN3ALGXB1", & - "SPN3ALGXB2","SPN3ALGXB3","SPN3ALGYB1","SPN3ALGYB2","SPN3ALGYB3","SPN3ALGZB1","SPN3ALGZB2", & - "SPN3ALGZB3","SPN3ALXB1 ","SPN3ALXB2 ","SPN3ALXB3 ","SPN3ALYB1 ","SPN3ALYB2 ","SPN3ALYB3 ", & - "SPN3ALZB1 ","SPN3ALZB2 ","SPN3ALZB3 ","SPN3FLXB1 ","SPN3FLXB2 ","SPN3FLXB3 ","SPN3FLYB1 ", & - "SPN3FLYB2 ","SPN3FLYB3 ","SPN3FLZB1 ","SPN3FLZB2 ","SPN3FLZB3 ","SPN3MLXB1 ","SPN3MLXB2 ", & - "SPN3MLXB3 ","SPN3MLYB1 ","SPN3MLYB2 ","SPN3MLYB3 ","SPN3MLZB1 ","SPN3MLZB2 ","SPN3MLZB3 ", & - "SPN3RDXB1 ","SPN3RDXB2 ","SPN3RDXB3 ","SPN3RDYB1 ","SPN3RDYB2 ","SPN3RDYB3 ","SPN3RDZB1 ", & - "SPN3RDZB2 ","SPN3RDZB3 ","SPN3TDXB1 ","SPN3TDXB2 ","SPN3TDXB3 ","SPN3TDYB1 ","SPN3TDYB2 ", & - "SPN3TDYB3 ","SPN3TDZB1 ","SPN3TDZB2 ","SPN3TDZB3 ","SPN4ALGXB1","SPN4ALGXB2","SPN4ALGXB3", & - "SPN4ALGYB1","SPN4ALGYB2","SPN4ALGYB3","SPN4ALGZB1","SPN4ALGZB2","SPN4ALGZB3","SPN4ALXB1 ", & - "SPN4ALXB2 ","SPN4ALXB3 ","SPN4ALYB1 ","SPN4ALYB2 ","SPN4ALYB3 ","SPN4ALZB1 ","SPN4ALZB2 ", & - "SPN4ALZB3 ","SPN4FLXB1 ","SPN4FLXB2 ","SPN4FLXB3 ","SPN4FLYB1 ","SPN4FLYB2 ","SPN4FLYB3 ", & - "SPN4FLZB1 ","SPN4FLZB2 ","SPN4FLZB3 ","SPN4MLXB1 ","SPN4MLXB2 ","SPN4MLXB3 ","SPN4MLYB1 ", & - "SPN4MLYB2 ","SPN4MLYB3 ","SPN4MLZB1 ","SPN4MLZB2 ","SPN4MLZB3 ","SPN4RDXB1 ","SPN4RDXB2 ", & - "SPN4RDXB3 ","SPN4RDYB1 ","SPN4RDYB2 ","SPN4RDYB3 ","SPN4RDZB1 ","SPN4RDZB2 ","SPN4RDZB3 ", & - "SPN4TDXB1 ","SPN4TDXB2 ","SPN4TDXB3 ","SPN4TDYB1 ","SPN4TDYB2 ","SPN4TDYB3 ","SPN4TDZB1 ", & - "SPN4TDZB2 ","SPN4TDZB3 ","SPN5ALGXB1","SPN5ALGXB2","SPN5ALGXB3","SPN5ALGYB1","SPN5ALGYB2", & - "SPN5ALGYB3","SPN5ALGZB1","SPN5ALGZB2","SPN5ALGZB3","SPN5ALXB1 ","SPN5ALXB2 ","SPN5ALXB3 ", & - "SPN5ALYB1 ","SPN5ALYB2 ","SPN5ALYB3 ","SPN5ALZB1 ","SPN5ALZB2 ","SPN5ALZB3 ","SPN5FLXB1 ", & - "SPN5FLXB2 ","SPN5FLXB3 ","SPN5FLYB1 ","SPN5FLYB2 ","SPN5FLYB3 ","SPN5FLZB1 ","SPN5FLZB2 ", & - "SPN5FLZB3 ","SPN5MLXB1 ","SPN5MLXB2 ","SPN5MLXB3 ","SPN5MLYB1 ","SPN5MLYB2 ","SPN5MLYB3 ", & - "SPN5MLZB1 ","SPN5MLZB2 ","SPN5MLZB3 ","SPN5RDXB1 ","SPN5RDXB2 ","SPN5RDXB3 ","SPN5RDYB1 ", & - "SPN5RDYB2 ","SPN5RDYB3 ","SPN5RDZB1 ","SPN5RDZB2 ","SPN5RDZB3 ","SPN5TDXB1 ","SPN5TDXB2 ", & - "SPN5TDXB3 ","SPN5TDYB1 ","SPN5TDYB2 ","SPN5TDYB3 ","SPN5TDZB1 ","SPN5TDZB2 ","SPN5TDZB3 ", & - "SPN6ALGXB1","SPN6ALGXB2","SPN6ALGXB3","SPN6ALGYB1","SPN6ALGYB2","SPN6ALGYB3","SPN6ALGZB1", & - "SPN6ALGZB2","SPN6ALGZB3","SPN6ALXB1 ","SPN6ALXB2 ","SPN6ALXB3 ","SPN6ALYB1 ","SPN6ALYB2 ", & - "SPN6ALYB3 ","SPN6ALZB1 ","SPN6ALZB2 ","SPN6ALZB3 ","SPN6FLXB1 ","SPN6FLXB2 ","SPN6FLXB3 ", & - "SPN6FLYB1 ","SPN6FLYB2 ","SPN6FLYB3 ","SPN6FLZB1 ","SPN6FLZB2 ","SPN6FLZB3 ","SPN6MLXB1 ", & - "SPN6MLXB2 ","SPN6MLXB3 ","SPN6MLYB1 ","SPN6MLYB2 ","SPN6MLYB3 ","SPN6MLZB1 ","SPN6MLZB2 ", & - "SPN6MLZB3 ","SPN6RDXB1 ","SPN6RDXB2 ","SPN6RDXB3 ","SPN6RDYB1 ","SPN6RDYB2 ","SPN6RDYB3 ", & - "SPN6RDZB1 ","SPN6RDZB2 ","SPN6RDZB3 ","SPN6TDXB1 ","SPN6TDXB2 ","SPN6TDXB3 ","SPN6TDYB1 ", & - "SPN6TDYB2 ","SPN6TDYB3 ","SPN6TDZB1 ","SPN6TDZB2 ","SPN6TDZB3 ","SPN7ALGXB1","SPN7ALGXB2", & - "SPN7ALGXB3","SPN7ALGYB1","SPN7ALGYB2","SPN7ALGYB3","SPN7ALGZB1","SPN7ALGZB2","SPN7ALGZB3", & - "SPN7ALXB1 ","SPN7ALXB2 ","SPN7ALXB3 ","SPN7ALYB1 ","SPN7ALYB2 ","SPN7ALYB3 ","SPN7ALZB1 ", & - "SPN7ALZB2 ","SPN7ALZB3 ","SPN7FLXB1 ","SPN7FLXB2 ","SPN7FLXB3 ","SPN7FLYB1 ","SPN7FLYB2 ", & - "SPN7FLYB3 ","SPN7FLZB1 ","SPN7FLZB2 ","SPN7FLZB3 ","SPN7MLXB1 ","SPN7MLXB2 ","SPN7MLXB3 ", & - "SPN7MLYB1 ","SPN7MLYB2 ","SPN7MLYB3 ","SPN7MLZB1 ","SPN7MLZB2 ","SPN7MLZB3 ","SPN7RDXB1 ", & - "SPN7RDXB2 ","SPN7RDXB3 ","SPN7RDYB1 ","SPN7RDYB2 ","SPN7RDYB3 ","SPN7RDZB1 ","SPN7RDZB2 ", & - "SPN7RDZB3 ","SPN7TDXB1 ","SPN7TDXB2 ","SPN7TDXB3 ","SPN7TDYB1 ","SPN7TDYB2 ","SPN7TDYB3 ", & - "SPN7TDZB1 ","SPN7TDZB2 ","SPN7TDZB3 ","SPN8ALGXB1","SPN8ALGXB2","SPN8ALGXB3","SPN8ALGYB1", & - "SPN8ALGYB2","SPN8ALGYB3","SPN8ALGZB1","SPN8ALGZB2","SPN8ALGZB3","SPN8ALXB1 ","SPN8ALXB2 ", & - "SPN8ALXB3 ","SPN8ALYB1 ","SPN8ALYB2 ","SPN8ALYB3 ","SPN8ALZB1 ","SPN8ALZB2 ","SPN8ALZB3 ", & - "SPN8FLXB1 ","SPN8FLXB2 ","SPN8FLXB3 ","SPN8FLYB1 ","SPN8FLYB2 ","SPN8FLYB3 ","SPN8FLZB1 ", & - "SPN8FLZB2 ","SPN8FLZB3 ","SPN8MLXB1 ","SPN8MLXB2 ","SPN8MLXB3 ","SPN8MLYB1 ","SPN8MLYB2 ", & - "SPN8MLYB3 ","SPN8MLZB1 ","SPN8MLZB2 ","SPN8MLZB3 ","SPN8RDXB1 ","SPN8RDXB2 ","SPN8RDXB3 ", & - "SPN8RDYB1 ","SPN8RDYB2 ","SPN8RDYB3 ","SPN8RDZB1 ","SPN8RDZB2 ","SPN8RDZB3 ","SPN8TDXB1 ", & - "SPN8TDXB2 ","SPN8TDXB3 ","SPN8TDYB1 ","SPN8TDYB2 ","SPN8TDYB3 ","SPN8TDZB1 ","SPN8TDZB2 ", & - "SPN8TDZB3 ","SPN9ALGXB1","SPN9ALGXB2","SPN9ALGXB3","SPN9ALGYB1","SPN9ALGYB2","SPN9ALGYB3", & - "SPN9ALGZB1","SPN9ALGZB2","SPN9ALGZB3","SPN9ALXB1 ","SPN9ALXB2 ","SPN9ALXB3 ","SPN9ALYB1 ", & - "SPN9ALYB2 ","SPN9ALYB3 ","SPN9ALZB1 ","SPN9ALZB2 ","SPN9ALZB3 ","SPN9FLXB1 ","SPN9FLXB2 ", & - "SPN9FLXB3 ","SPN9FLYB1 ","SPN9FLYB2 ","SPN9FLYB3 ","SPN9FLZB1 ","SPN9FLZB2 ","SPN9FLZB3 ", & - "SPN9MLXB1 ","SPN9MLXB2 ","SPN9MLXB3 ","SPN9MLYB1 ","SPN9MLYB2 ","SPN9MLYB3 ","SPN9MLZB1 ", & - "SPN9MLZB2 ","SPN9MLZB3 ","SPN9RDXB1 ","SPN9RDXB2 ","SPN9RDXB3 ","SPN9RDYB1 ","SPN9RDYB2 ", & - "SPN9RDYB3 ","SPN9RDZB1 ","SPN9RDZB2 ","SPN9RDZB3 ","SPN9TDXB1 ","SPN9TDXB2 ","SPN9TDXB3 ", & - "SPN9TDYB1 ","SPN9TDYB2 ","SPN9TDYB3 ","SPN9TDZB1 ","SPN9TDZB2 ","SPN9TDZB3 ","TAILFURL ", & - "TAILFURLA ","TAILFURLP ","TAILFURLV ","TEETAYA ","TEETDEFL ","TEETPYA ","TEETVYA ", & - "TFRLBRM ","TIP2TWR1 ","TIP2TWR2 ","TIP2TWR3 ","TIPALGXB1 ","TIPALGXB2 ","TIPALGXB3 ", & - "TIPALGYB1 ","TIPALGYB2 ","TIPALGYB3 ","TIPALGZB1 ","TIPALGZB2 ","TIPALGZB3 ","TIPALXB1 ", & - "TIPALXB2 ","TIPALXB3 ","TIPALYB1 ","TIPALYB2 ","TIPALYB3 ","TIPALZB1 ","TIPALZB2 ", & - "TIPALZB3 ","TIPCLRNC1 ","TIPCLRNC2 ","TIPCLRNC3 ","TIPDXB1 ","TIPDXB2 ","TIPDXB3 ", & - "TIPDXC1 ","TIPDXC2 ","TIPDXC3 ","TIPDYB1 ","TIPDYB2 ","TIPDYB3 ","TIPDYC1 ", & - "TIPDYC2 ","TIPDYC3 ","TIPDZB1 ","TIPDZB2 ","TIPDZB3 ","TIPDZC1 ","TIPDZC2 ", & - "TIPDZC3 ","TIPRDXB1 ","TIPRDXB2 ","TIPRDXB3 ","TIPRDYB1 ","TIPRDYB2 ","TIPRDYB3 ", & - "TIPRDZB1 ","TIPRDZB2 ","TIPRDZB3 ","TIPRDZC1 ","TIPRDZC2 ","TIPRDZC3 ","TTDSPAX ", & - "TTDSPFA ","TTDSPPTCH ","TTDSPROLL ","TTDSPSS ","TTDSPTWST ","TWHT1ALGXT","TWHT1ALGYT", & - "TWHT1ALGZT","TWHT1ALXT ","TWHT1ALYT ","TWHT1ALZT ","TWHT1FLXT ","TWHT1FLYT ","TWHT1FLZT ", & - "TWHT1MLXT ","TWHT1MLYT ","TWHT1MLZT ","TWHT1RDXT ","TWHT1RDYT ","TWHT1RDZT ","TWHT1RPXI ", & - "TWHT1RPYI ","TWHT1RPZI ","TWHT1TDXT ","TWHT1TDYT ","TWHT1TDZT ","TWHT1TPXI ","TWHT1TPYI ", & - "TWHT1TPZI ","TWHT2ALGXT","TWHT2ALGYT","TWHT2ALGZT","TWHT2ALXT ","TWHT2ALYT ","TWHT2ALZT ", & - "TWHT2FLXT ","TWHT2FLYT ","TWHT2FLZT ","TWHT2MLXT ","TWHT2MLYT ","TWHT2MLZT ","TWHT2RDXT ", & - "TWHT2RDYT ","TWHT2RDZT ","TWHT2RPXI ","TWHT2RPYI ","TWHT2RPZI ","TWHT2TDXT ","TWHT2TDYT ", & - "TWHT2TDZT ","TWHT2TPXI ","TWHT2TPYI ","TWHT2TPZI ","TWHT3ALGXT","TWHT3ALGYT","TWHT3ALGZT", & - "TWHT3ALXT ","TWHT3ALYT ","TWHT3ALZT ","TWHT3FLXT ","TWHT3FLYT ","TWHT3FLZT ","TWHT3MLXT ", & - "TWHT3MLYT ","TWHT3MLZT ","TWHT3RDXT ","TWHT3RDYT ","TWHT3RDZT ","TWHT3RPXI ","TWHT3RPYI ", & - "TWHT3RPZI ","TWHT3TDXT ","TWHT3TDYT ","TWHT3TDZT ","TWHT3TPXI ","TWHT3TPYI ","TWHT3TPZI ", & - "TWHT4ALGXT","TWHT4ALGYT","TWHT4ALGZT","TWHT4ALXT ","TWHT4ALYT ","TWHT4ALZT ","TWHT4FLXT ", & - "TWHT4FLYT ","TWHT4FLZT ","TWHT4MLXT ","TWHT4MLYT ","TWHT4MLZT ","TWHT4RDXT ","TWHT4RDYT ", & - "TWHT4RDZT ","TWHT4RPXI ","TWHT4RPYI ","TWHT4RPZI ","TWHT4TDXT ","TWHT4TDYT ","TWHT4TDZT ", & - "TWHT4TPXI ","TWHT4TPYI ","TWHT4TPZI ","TWHT5ALGXT","TWHT5ALGYT","TWHT5ALGZT","TWHT5ALXT ", & - "TWHT5ALYT ","TWHT5ALZT ","TWHT5FLXT ","TWHT5FLYT ","TWHT5FLZT ","TWHT5MLXT ","TWHT5MLYT ", & - "TWHT5MLZT ","TWHT5RDXT ","TWHT5RDYT ","TWHT5RDZT ","TWHT5RPXI ","TWHT5RPYI ","TWHT5RPZI ", & - "TWHT5TDXT ","TWHT5TDYT ","TWHT5TDZT ","TWHT5TPXI ","TWHT5TPYI ","TWHT5TPZI ","TWHT6ALGXT", & - "TWHT6ALGYT","TWHT6ALGZT","TWHT6ALXT ","TWHT6ALYT ","TWHT6ALZT ","TWHT6FLXT ","TWHT6FLYT ", & - "TWHT6FLZT ","TWHT6MLXT ","TWHT6MLYT ","TWHT6MLZT ","TWHT6RDXT ","TWHT6RDYT ","TWHT6RDZT ", & - "TWHT6RPXI ","TWHT6RPYI ","TWHT6RPZI ","TWHT6TDXT ","TWHT6TDYT ","TWHT6TDZT ","TWHT6TPXI ", & - "TWHT6TPYI ","TWHT6TPZI ","TWHT7ALGXT","TWHT7ALGYT","TWHT7ALGZT","TWHT7ALXT ","TWHT7ALYT ", & - "TWHT7ALZT ","TWHT7FLXT ","TWHT7FLYT ","TWHT7FLZT ","TWHT7MLXT ","TWHT7MLYT ","TWHT7MLZT ", & - "TWHT7RDXT ","TWHT7RDYT ","TWHT7RDZT ","TWHT7RPXI ","TWHT7RPYI ","TWHT7RPZI ","TWHT7TDXT ", & - "TWHT7TDYT ","TWHT7TDZT ","TWHT7TPXI ","TWHT7TPYI ","TWHT7TPZI ","TWHT8ALGXT","TWHT8ALGYT", & - "TWHT8ALGZT","TWHT8ALXT ","TWHT8ALYT ","TWHT8ALZT ","TWHT8FLXT ","TWHT8FLYT ","TWHT8FLZT ", & - "TWHT8MLXT ","TWHT8MLYT ","TWHT8MLZT ","TWHT8RDXT ","TWHT8RDYT ","TWHT8RDZT ","TWHT8RPXI ", & - "TWHT8RPYI ","TWHT8RPZI ","TWHT8TDXT ","TWHT8TDYT ","TWHT8TDZT ","TWHT8TPXI ","TWHT8TPYI ", & - "TWHT8TPZI ","TWHT9ALGXT","TWHT9ALGYT","TWHT9ALGZT","TWHT9ALXT ","TWHT9ALYT ","TWHT9ALZT ", & - "TWHT9FLXT ","TWHT9FLYT ","TWHT9FLZT ","TWHT9MLXT ","TWHT9MLYT ","TWHT9MLZT ","TWHT9RDXT ", & - "TWHT9RDYT ","TWHT9RDZT ","TWHT9RPXI ","TWHT9RPYI ","TWHT9RPZI ","TWHT9TDXT ","TWHT9TDYT ", & - "TWHT9TDZT ","TWHT9TPXI ","TWHT9TPYI ","TWHT9TPZI ","TWRBSFXT ","TWRBSFYT ","TWRBSFZT ", & - "TWRBSMXT ","TWRBSMYT ","TWRBSMZT ","TWRCLRNC1 ","TWRCLRNC2 ","TWRCLRNC3 ","TWRTPTDXI ", & - "TWRTPTDYI ","TWRTPTDZI ","TWSTDEFL1 ","TWSTDEFL2 ","TWSTDEFL3 ","YAWACCEL ","YAWAZN ", & - "YAWAZP ","YAWBRFXN ","YAWBRFXP ","YAWBRFYN ","YAWBRFYP ","YAWBRFZN ","YAWBRFZP ", & - "YAWBRMXN ","YAWBRMXP ","YAWBRMYN ","YAWBRMYP ","YAWBRMZN ","YAWBRMZP ","YAWBRRAXP ", & - "YAWBRRAYP ","YAWBRRAZP ","YAWBRRDXT ","YAWBRRDYT ","YAWBRRDZT ","YAWBRRVXP ","YAWBRRVYP ", & - "YAWBRRVZP ","YAWBRTAGXP","YAWBRTAGYP","YAWBRTAGZP","YAWBRTAXP ","YAWBRTAYP ","YAWBRTAZP ", & - "YAWBRTDXI ","YAWBRTDXP ","YAWBRTDXT ","YAWBRTDYI ","YAWBRTDYP ","YAWBRTDYT ","YAWBRTDZI ", & - "YAWBRTDZP ","YAWBRTDZT ","YAWBRTVXP ","YAWBRTVYP ","YAWBRTVZP ","YAWPOS ","YAWPZN ", & - "YAWPZP ","YAWRATE ","YAWVZN ","YAWVZP "/) - INTEGER(IntKi), PARAMETER :: ParamIndxAry(1110) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + "DOMEGAYF ","GENACCEL ","GENSPEED ","HSSBRTQ ","HSSHFTA ","HSSHFTPWR ","HSSHFTTQ ", & + "HSSHFTV ","IPDEFL1 ","IPDEFL2 ","IPDEFL3 ","LSSGAGA ","LSSGAGAXA ","LSSGAGAXS ", & + "LSSGAGFXA ","LSSGAGFXS ","LSSGAGFYA ","LSSGAGFYS ","LSSGAGFZA ","LSSGAGFZS ","LSSGAGMXA ", & + "LSSGAGMXS ","LSSGAGMYA ","LSSGAGMYS ","LSSGAGMZA ","LSSGAGMZS ","LSSGAGP ","LSSGAGPXA ", & + "LSSGAGPXS ","LSSGAGV ","LSSGAGVXA ","LSSGAGVXS ","LSSHFTFXA ","LSSHFTFXS ","LSSHFTFYA ", & + "LSSHFTFYS ","LSSHFTFZA ","LSSHFTFZS ","LSSHFTMXA ","LSSHFTMXS ","LSSHFTPWR ","LSSHFTTQ ", & + "LSSTIPA ","LSSTIPAXA ","LSSTIPAXS ","LSSTIPMYA ","LSSTIPMYS ","LSSTIPMZA ","LSSTIPMZS ", & + "LSSTIPP ","LSSTIPPXA ","LSSTIPPXS ","LSSTIPV ","LSSTIPVXA ","LSSTIPVXS ","NACYAW ", & + "NACYAWA ","NACYAWP ","NACYAWV ","NCIMURAXS ","NCIMURAYS ","NCIMURAZS ","NCIMURVXS ", & + "NCIMURVYS ","NCIMURVZS ","NCIMUTAGXS","NCIMUTAGYS","NCIMUTAGZS","NCIMUTAXS ","NCIMUTAYS ", & + "NCIMUTAZS ","NCIMUTVXS ","NCIMUTVYS ","NCIMUTVZS ","OMEGAYF ","OOPDEFL1 ","OOPDEFL2 ", & + "OOPDEFL3 ","PTCHDEFL1 ","PTCHDEFL2 ","PTCHDEFL3 ","PTCHPMZB1 ","PTCHPMZB2 ","PTCHPMZB3 ", & + "PTCHPMZC1 ","PTCHPMZC2 ","PTCHPMZC3 ","PTFMHEAVE ","PTFMPITCH ","PTFMRAXI ","PTFMRAXT ", & + "PTFMRAYI ","PTFMRAYT ","PTFMRAZI ","PTFMRAZT ","PTFMRDXI ","PTFMRDYI ","PTFMRDZI ", & + "PTFMROLL ","PTFMRVXI ","PTFMRVXT ","PTFMRVYI ","PTFMRVYT ","PTFMRVZI ","PTFMRVZT ", & + "PTFMSURGE ","PTFMSWAY ","PTFMTAGXI ","PTFMTAGXT ","PTFMTAGYI ","PTFMTAGYT ","PTFMTAGZI ", & + "PTFMTAGZT ","PTFMTAXI ","PTFMTAXT ","PTFMTAYI ","PTFMTAYT ","PTFMTAZI ","PTFMTAZT ", & + "PTFMTDXI ","PTFMTDXT ","PTFMTDYI ","PTFMTDYT ","PTFMTDZI ","PTFMTDZT ","PTFMTVXI ", & + "PTFMTVXT ","PTFMTVYI ","PTFMTVYT ","PTFMTVZI ","PTFMTVZT ","PTFMYAW ","QD2_B1E1 ", & + "QD2_B1F1 ","QD2_B1F2 ","QD2_B2E1 ","QD2_B2F1 ","QD2_B2F2 ","QD2_B3E1 ","QD2_B3F1 ", & + "QD2_B3F2 ","QD2_DRTR ","QD2_GEAZ ","QD2_HV ","QD2_P ","QD2_R ","QD2_RFRL ", & + "QD2_SG ","QD2_SW ","QD2_TEET ","QD2_TFA1 ","QD2_TFA2 ","QD2_TFRL ","QD2_TSS1 ", & + "QD2_TSS2 ","QD2_Y ","QD2_YAW ","QD_B1E1 ","QD_B1F1 ","QD_B1F2 ","QD_B2E1 ", & + "QD_B2F1 ","QD_B2F2 ","QD_B3E1 ","QD_B3F1 ","QD_B3F2 ","QD_DRTR ","QD_GEAZ ", & + "QD_HV ","QD_P ","QD_R ","QD_RFRL ","QD_SG ","QD_SW ","QD_TEET ", & + "QD_TFA1 ","QD_TFA2 ","QD_TFRL ","QD_TSS1 ","QD_TSS2 ","QD_Y ","QD_YAW ", & + "Q_B1E1 ","Q_B1F1 ","Q_B1F2 ","Q_B2E1 ","Q_B2F1 ","Q_B2F2 ","Q_B3E1 ", & + "Q_B3F1 ","Q_B3F2 ","Q_DRTR ","Q_GEAZ ","Q_HV ","Q_P ","Q_R ", & + "Q_RFRL ","Q_SG ","Q_SW ","Q_TEET ","Q_TFA1 ","Q_TFA2 ","Q_TFRL ", & + "Q_TSS1 ","Q_TSS2 ","Q_Y ","Q_YAW ","RFRLBRM ","ROLLDEFL1 ","ROLLDEFL2 ", & + "ROLLDEFL3 ","ROOTFXB1 ","ROOTFXB2 ","ROOTFXB3 ","ROOTFXC1 ","ROOTFXC2 ","ROOTFXC3 ", & + "ROOTFYB1 ","ROOTFYB2 ","ROOTFYB3 ","ROOTFYC1 ","ROOTFYC2 ","ROOTFYC3 ","ROOTFZB1 ", & + "ROOTFZB2 ","ROOTFZB3 ","ROOTFZC1 ","ROOTFZC2 ","ROOTFZC3 ","ROOTMEDG1 ","ROOTMEDG2 ", & + "ROOTMEDG3 ","ROOTMFLP1 ","ROOTMFLP2 ","ROOTMFLP3 ","ROOTMIP1 ","ROOTMIP2 ","ROOTMIP3 ", & + "ROOTMOOP1 ","ROOTMOOP2 ","ROOTMOOP3 ","ROOTMXB1 ","ROOTMXB2 ","ROOTMXB3 ","ROOTMXC1 ", & + "ROOTMXC2 ","ROOTMXC3 ","ROOTMYB1 ","ROOTMYB2 ","ROOTMYB3 ","ROOTMYC1 ","ROOTMYC2 ", & + "ROOTMYC3 ","ROOTMZB1 ","ROOTMZB2 ","ROOTMZB3 ","ROOTMZC1 ","ROOTMZC2 ","ROOTMZC3 ", & + "ROTACCEL ","ROTFURL ","ROTFURLA ","ROTFURLP ","ROTFURLV ","ROTPWR ","ROTSPEED ", & + "ROTTEETA ","ROTTEETP ","ROTTEETV ","ROTTHRUST ","ROTTORQ ","SPN1ALGXB1","SPN1ALGXB2", & + "SPN1ALGXB3","SPN1ALGYB1","SPN1ALGYB2","SPN1ALGYB3","SPN1ALGZB1","SPN1ALGZB2","SPN1ALGZB3", & + "SPN1ALXB1 ","SPN1ALXB2 ","SPN1ALXB3 ","SPN1ALYB1 ","SPN1ALYB2 ","SPN1ALYB3 ","SPN1ALZB1 ", & + "SPN1ALZB2 ","SPN1ALZB3 ","SPN1FLXB1 ","SPN1FLXB2 ","SPN1FLXB3 ","SPN1FLYB1 ","SPN1FLYB2 ", & + "SPN1FLYB3 ","SPN1FLZB1 ","SPN1FLZB2 ","SPN1FLZB3 ","SPN1MLXB1 ","SPN1MLXB2 ","SPN1MLXB3 ", & + "SPN1MLYB1 ","SPN1MLYB2 ","SPN1MLYB3 ","SPN1MLZB1 ","SPN1MLZB2 ","SPN1MLZB3 ","SPN1RDXB1 ", & + "SPN1RDXB2 ","SPN1RDXB3 ","SPN1RDYB1 ","SPN1RDYB2 ","SPN1RDYB3 ","SPN1RDZB1 ","SPN1RDZB2 ", & + "SPN1RDZB3 ","SPN1TDXB1 ","SPN1TDXB2 ","SPN1TDXB3 ","SPN1TDYB1 ","SPN1TDYB2 ","SPN1TDYB3 ", & + "SPN1TDZB1 ","SPN1TDZB2 ","SPN1TDZB3 ","SPN2ALGXB1","SPN2ALGXB2","SPN2ALGXB3","SPN2ALGYB1", & + "SPN2ALGYB2","SPN2ALGYB3","SPN2ALGZB1","SPN2ALGZB2","SPN2ALGZB3","SPN2ALXB1 ","SPN2ALXB2 ", & + "SPN2ALXB3 ","SPN2ALYB1 ","SPN2ALYB2 ","SPN2ALYB3 ","SPN2ALZB1 ","SPN2ALZB2 ","SPN2ALZB3 ", & + "SPN2FLXB1 ","SPN2FLXB2 ","SPN2FLXB3 ","SPN2FLYB1 ","SPN2FLYB2 ","SPN2FLYB3 ","SPN2FLZB1 ", & + "SPN2FLZB2 ","SPN2FLZB3 ","SPN2MLXB1 ","SPN2MLXB2 ","SPN2MLXB3 ","SPN2MLYB1 ","SPN2MLYB2 ", & + "SPN2MLYB3 ","SPN2MLZB1 ","SPN2MLZB2 ","SPN2MLZB3 ","SPN2RDXB1 ","SPN2RDXB2 ","SPN2RDXB3 ", & + "SPN2RDYB1 ","SPN2RDYB2 ","SPN2RDYB3 ","SPN2RDZB1 ","SPN2RDZB2 ","SPN2RDZB3 ","SPN2TDXB1 ", & + "SPN2TDXB2 ","SPN2TDXB3 ","SPN2TDYB1 ","SPN2TDYB2 ","SPN2TDYB3 ","SPN2TDZB1 ","SPN2TDZB2 ", & + "SPN2TDZB3 ","SPN3ALGXB1","SPN3ALGXB2","SPN3ALGXB3","SPN3ALGYB1","SPN3ALGYB2","SPN3ALGYB3", & + "SPN3ALGZB1","SPN3ALGZB2","SPN3ALGZB3","SPN3ALXB1 ","SPN3ALXB2 ","SPN3ALXB3 ","SPN3ALYB1 ", & + "SPN3ALYB2 ","SPN3ALYB3 ","SPN3ALZB1 ","SPN3ALZB2 ","SPN3ALZB3 ","SPN3FLXB1 ","SPN3FLXB2 ", & + "SPN3FLXB3 ","SPN3FLYB1 ","SPN3FLYB2 ","SPN3FLYB3 ","SPN3FLZB1 ","SPN3FLZB2 ","SPN3FLZB3 ", & + "SPN3MLXB1 ","SPN3MLXB2 ","SPN3MLXB3 ","SPN3MLYB1 ","SPN3MLYB2 ","SPN3MLYB3 ","SPN3MLZB1 ", & + "SPN3MLZB2 ","SPN3MLZB3 ","SPN3RDXB1 ","SPN3RDXB2 ","SPN3RDXB3 ","SPN3RDYB1 ","SPN3RDYB2 ", & + "SPN3RDYB3 ","SPN3RDZB1 ","SPN3RDZB2 ","SPN3RDZB3 ","SPN3TDXB1 ","SPN3TDXB2 ","SPN3TDXB3 ", & + "SPN3TDYB1 ","SPN3TDYB2 ","SPN3TDYB3 ","SPN3TDZB1 ","SPN3TDZB2 ","SPN3TDZB3 ","SPN4ALGXB1", & + "SPN4ALGXB2","SPN4ALGXB3","SPN4ALGYB1","SPN4ALGYB2","SPN4ALGYB3","SPN4ALGZB1","SPN4ALGZB2", & + "SPN4ALGZB3","SPN4ALXB1 ","SPN4ALXB2 ","SPN4ALXB3 ","SPN4ALYB1 ","SPN4ALYB2 ","SPN4ALYB3 ", & + "SPN4ALZB1 ","SPN4ALZB2 ","SPN4ALZB3 ","SPN4FLXB1 ","SPN4FLXB2 ","SPN4FLXB3 ","SPN4FLYB1 ", & + "SPN4FLYB2 ","SPN4FLYB3 ","SPN4FLZB1 ","SPN4FLZB2 ","SPN4FLZB3 ","SPN4MLXB1 ","SPN4MLXB2 ", & + "SPN4MLXB3 ","SPN4MLYB1 ","SPN4MLYB2 ","SPN4MLYB3 ","SPN4MLZB1 ","SPN4MLZB2 ","SPN4MLZB3 ", & + "SPN4RDXB1 ","SPN4RDXB2 ","SPN4RDXB3 ","SPN4RDYB1 ","SPN4RDYB2 ","SPN4RDYB3 ","SPN4RDZB1 ", & + "SPN4RDZB2 ","SPN4RDZB3 ","SPN4TDXB1 ","SPN4TDXB2 ","SPN4TDXB3 ","SPN4TDYB1 ","SPN4TDYB2 ", & + "SPN4TDYB3 ","SPN4TDZB1 ","SPN4TDZB2 ","SPN4TDZB3 ","SPN5ALGXB1","SPN5ALGXB2","SPN5ALGXB3", & + "SPN5ALGYB1","SPN5ALGYB2","SPN5ALGYB3","SPN5ALGZB1","SPN5ALGZB2","SPN5ALGZB3","SPN5ALXB1 ", & + "SPN5ALXB2 ","SPN5ALXB3 ","SPN5ALYB1 ","SPN5ALYB2 ","SPN5ALYB3 ","SPN5ALZB1 ","SPN5ALZB2 ", & + "SPN5ALZB3 ","SPN5FLXB1 ","SPN5FLXB2 ","SPN5FLXB3 ","SPN5FLYB1 ","SPN5FLYB2 ","SPN5FLYB3 ", & + "SPN5FLZB1 ","SPN5FLZB2 ","SPN5FLZB3 ","SPN5MLXB1 ","SPN5MLXB2 ","SPN5MLXB3 ","SPN5MLYB1 ", & + "SPN5MLYB2 ","SPN5MLYB3 ","SPN5MLZB1 ","SPN5MLZB2 ","SPN5MLZB3 ","SPN5RDXB1 ","SPN5RDXB2 ", & + "SPN5RDXB3 ","SPN5RDYB1 ","SPN5RDYB2 ","SPN5RDYB3 ","SPN5RDZB1 ","SPN5RDZB2 ","SPN5RDZB3 ", & + "SPN5TDXB1 ","SPN5TDXB2 ","SPN5TDXB3 ","SPN5TDYB1 ","SPN5TDYB2 ","SPN5TDYB3 ","SPN5TDZB1 ", & + "SPN5TDZB2 ","SPN5TDZB3 ","SPN6ALGXB1","SPN6ALGXB2","SPN6ALGXB3","SPN6ALGYB1","SPN6ALGYB2", & + "SPN6ALGYB3","SPN6ALGZB1","SPN6ALGZB2","SPN6ALGZB3","SPN6ALXB1 ","SPN6ALXB2 ","SPN6ALXB3 ", & + "SPN6ALYB1 ","SPN6ALYB2 ","SPN6ALYB3 ","SPN6ALZB1 ","SPN6ALZB2 ","SPN6ALZB3 ","SPN6FLXB1 ", & + "SPN6FLXB2 ","SPN6FLXB3 ","SPN6FLYB1 ","SPN6FLYB2 ","SPN6FLYB3 ","SPN6FLZB1 ","SPN6FLZB2 ", & + "SPN6FLZB3 ","SPN6MLXB1 ","SPN6MLXB2 ","SPN6MLXB3 ","SPN6MLYB1 ","SPN6MLYB2 ","SPN6MLYB3 ", & + "SPN6MLZB1 ","SPN6MLZB2 ","SPN6MLZB3 ","SPN6RDXB1 ","SPN6RDXB2 ","SPN6RDXB3 ","SPN6RDYB1 ", & + "SPN6RDYB2 ","SPN6RDYB3 ","SPN6RDZB1 ","SPN6RDZB2 ","SPN6RDZB3 ","SPN6TDXB1 ","SPN6TDXB2 ", & + "SPN6TDXB3 ","SPN6TDYB1 ","SPN6TDYB2 ","SPN6TDYB3 ","SPN6TDZB1 ","SPN6TDZB2 ","SPN6TDZB3 ", & + "SPN7ALGXB1","SPN7ALGXB2","SPN7ALGXB3","SPN7ALGYB1","SPN7ALGYB2","SPN7ALGYB3","SPN7ALGZB1", & + "SPN7ALGZB2","SPN7ALGZB3","SPN7ALXB1 ","SPN7ALXB2 ","SPN7ALXB3 ","SPN7ALYB1 ","SPN7ALYB2 ", & + "SPN7ALYB3 ","SPN7ALZB1 ","SPN7ALZB2 ","SPN7ALZB3 ","SPN7FLXB1 ","SPN7FLXB2 ","SPN7FLXB3 ", & + "SPN7FLYB1 ","SPN7FLYB2 ","SPN7FLYB3 ","SPN7FLZB1 ","SPN7FLZB2 ","SPN7FLZB3 ","SPN7MLXB1 ", & + "SPN7MLXB2 ","SPN7MLXB3 ","SPN7MLYB1 ","SPN7MLYB2 ","SPN7MLYB3 ","SPN7MLZB1 ","SPN7MLZB2 ", & + "SPN7MLZB3 ","SPN7RDXB1 ","SPN7RDXB2 ","SPN7RDXB3 ","SPN7RDYB1 ","SPN7RDYB2 ","SPN7RDYB3 ", & + "SPN7RDZB1 ","SPN7RDZB2 ","SPN7RDZB3 ","SPN7TDXB1 ","SPN7TDXB2 ","SPN7TDXB3 ","SPN7TDYB1 ", & + "SPN7TDYB2 ","SPN7TDYB3 ","SPN7TDZB1 ","SPN7TDZB2 ","SPN7TDZB3 ","SPN8ALGXB1","SPN8ALGXB2", & + "SPN8ALGXB3","SPN8ALGYB1","SPN8ALGYB2","SPN8ALGYB3","SPN8ALGZB1","SPN8ALGZB2","SPN8ALGZB3", & + "SPN8ALXB1 ","SPN8ALXB2 ","SPN8ALXB3 ","SPN8ALYB1 ","SPN8ALYB2 ","SPN8ALYB3 ","SPN8ALZB1 ", & + "SPN8ALZB2 ","SPN8ALZB3 ","SPN8FLXB1 ","SPN8FLXB2 ","SPN8FLXB3 ","SPN8FLYB1 ","SPN8FLYB2 ", & + "SPN8FLYB3 ","SPN8FLZB1 ","SPN8FLZB2 ","SPN8FLZB3 ","SPN8MLXB1 ","SPN8MLXB2 ","SPN8MLXB3 ", & + "SPN8MLYB1 ","SPN8MLYB2 ","SPN8MLYB3 ","SPN8MLZB1 ","SPN8MLZB2 ","SPN8MLZB3 ","SPN8RDXB1 ", & + "SPN8RDXB2 ","SPN8RDXB3 ","SPN8RDYB1 ","SPN8RDYB2 ","SPN8RDYB3 ","SPN8RDZB1 ","SPN8RDZB2 ", & + "SPN8RDZB3 ","SPN8TDXB1 ","SPN8TDXB2 ","SPN8TDXB3 ","SPN8TDYB1 ","SPN8TDYB2 ","SPN8TDYB3 ", & + "SPN8TDZB1 ","SPN8TDZB2 ","SPN8TDZB3 ","SPN9ALGXB1","SPN9ALGXB2","SPN9ALGXB3","SPN9ALGYB1", & + "SPN9ALGYB2","SPN9ALGYB3","SPN9ALGZB1","SPN9ALGZB2","SPN9ALGZB3","SPN9ALXB1 ","SPN9ALXB2 ", & + "SPN9ALXB3 ","SPN9ALYB1 ","SPN9ALYB2 ","SPN9ALYB3 ","SPN9ALZB1 ","SPN9ALZB2 ","SPN9ALZB3 ", & + "SPN9FLXB1 ","SPN9FLXB2 ","SPN9FLXB3 ","SPN9FLYB1 ","SPN9FLYB2 ","SPN9FLYB3 ","SPN9FLZB1 ", & + "SPN9FLZB2 ","SPN9FLZB3 ","SPN9MLXB1 ","SPN9MLXB2 ","SPN9MLXB3 ","SPN9MLYB1 ","SPN9MLYB2 ", & + "SPN9MLYB3 ","SPN9MLZB1 ","SPN9MLZB2 ","SPN9MLZB3 ","SPN9RDXB1 ","SPN9RDXB2 ","SPN9RDXB3 ", & + "SPN9RDYB1 ","SPN9RDYB2 ","SPN9RDYB3 ","SPN9RDZB1 ","SPN9RDZB2 ","SPN9RDZB3 ","SPN9TDXB1 ", & + "SPN9TDXB2 ","SPN9TDXB3 ","SPN9TDYB1 ","SPN9TDYB2 ","SPN9TDYB3 ","SPN9TDZB1 ","SPN9TDZB2 ", & + "SPN9TDZB3 ","TAILFURL ","TAILFURLA ","TAILFURLP ","TAILFURLV ","TEETAYA ","TEETDEFL ", & + "TEETPYA ","TEETVYA ","TFRLBRM ","TIP2TWR1 ","TIP2TWR2 ","TIP2TWR3 ","TIPALGXB1 ", & + "TIPALGXB2 ","TIPALGXB3 ","TIPALGYB1 ","TIPALGYB2 ","TIPALGYB3 ","TIPALGZB1 ","TIPALGZB2 ", & + "TIPALGZB3 ","TIPALXB1 ","TIPALXB2 ","TIPALXB3 ","TIPALYB1 ","TIPALYB2 ","TIPALYB3 ", & + "TIPALZB1 ","TIPALZB2 ","TIPALZB3 ","TIPCLRNC1 ","TIPCLRNC2 ","TIPCLRNC3 ","TIPDXB1 ", & + "TIPDXB2 ","TIPDXB3 ","TIPDXC1 ","TIPDXC2 ","TIPDXC3 ","TIPDYB1 ","TIPDYB2 ", & + "TIPDYB3 ","TIPDYC1 ","TIPDYC2 ","TIPDYC3 ","TIPDZB1 ","TIPDZB2 ","TIPDZB3 ", & + "TIPDZC1 ","TIPDZC2 ","TIPDZC3 ","TIPRDXB1 ","TIPRDXB2 ","TIPRDXB3 ","TIPRDYB1 ", & + "TIPRDYB2 ","TIPRDYB3 ","TIPRDZB1 ","TIPRDZB2 ","TIPRDZB3 ","TIPRDZC1 ","TIPRDZC2 ", & + "TIPRDZC3 ","TTDSPAX ","TTDSPFA ","TTDSPPTCH ","TTDSPROLL ","TTDSPSS ","TTDSPTWST ", & + "TWHT1ALGXT","TWHT1ALGYT","TWHT1ALGZT","TWHT1ALXT ","TWHT1ALYT ","TWHT1ALZT ","TWHT1FLXT ", & + "TWHT1FLYT ","TWHT1FLZT ","TWHT1MLXT ","TWHT1MLYT ","TWHT1MLZT ","TWHT1RDXT ","TWHT1RDYT ", & + "TWHT1RDZT ","TWHT1RPXI ","TWHT1RPYI ","TWHT1RPZI ","TWHT1TDXT ","TWHT1TDYT ","TWHT1TDZT ", & + "TWHT1TPXI ","TWHT1TPYI ","TWHT1TPZI ","TWHT2ALGXT","TWHT2ALGYT","TWHT2ALGZT","TWHT2ALXT ", & + "TWHT2ALYT ","TWHT2ALZT ","TWHT2FLXT ","TWHT2FLYT ","TWHT2FLZT ","TWHT2MLXT ","TWHT2MLYT ", & + "TWHT2MLZT ","TWHT2RDXT ","TWHT2RDYT ","TWHT2RDZT ","TWHT2RPXI ","TWHT2RPYI ","TWHT2RPZI ", & + "TWHT2TDXT ","TWHT2TDYT ","TWHT2TDZT ","TWHT2TPXI ","TWHT2TPYI ","TWHT2TPZI ","TWHT3ALGXT", & + "TWHT3ALGYT","TWHT3ALGZT","TWHT3ALXT ","TWHT3ALYT ","TWHT3ALZT ","TWHT3FLXT ","TWHT3FLYT ", & + "TWHT3FLZT ","TWHT3MLXT ","TWHT3MLYT ","TWHT3MLZT ","TWHT3RDXT ","TWHT3RDYT ","TWHT3RDZT ", & + "TWHT3RPXI ","TWHT3RPYI ","TWHT3RPZI ","TWHT3TDXT ","TWHT3TDYT ","TWHT3TDZT ","TWHT3TPXI ", & + "TWHT3TPYI ","TWHT3TPZI ","TWHT4ALGXT","TWHT4ALGYT","TWHT4ALGZT","TWHT4ALXT ","TWHT4ALYT ", & + "TWHT4ALZT ","TWHT4FLXT ","TWHT4FLYT ","TWHT4FLZT ","TWHT4MLXT ","TWHT4MLYT ","TWHT4MLZT ", & + "TWHT4RDXT ","TWHT4RDYT ","TWHT4RDZT ","TWHT4RPXI ","TWHT4RPYI ","TWHT4RPZI ","TWHT4TDXT ", & + "TWHT4TDYT ","TWHT4TDZT ","TWHT4TPXI ","TWHT4TPYI ","TWHT4TPZI ","TWHT5ALGXT","TWHT5ALGYT", & + "TWHT5ALGZT","TWHT5ALXT ","TWHT5ALYT ","TWHT5ALZT ","TWHT5FLXT ","TWHT5FLYT ","TWHT5FLZT ", & + "TWHT5MLXT ","TWHT5MLYT ","TWHT5MLZT ","TWHT5RDXT ","TWHT5RDYT ","TWHT5RDZT ","TWHT5RPXI ", & + "TWHT5RPYI ","TWHT5RPZI ","TWHT5TDXT ","TWHT5TDYT ","TWHT5TDZT ","TWHT5TPXI ","TWHT5TPYI ", & + "TWHT5TPZI ","TWHT6ALGXT","TWHT6ALGYT","TWHT6ALGZT","TWHT6ALXT ","TWHT6ALYT ","TWHT6ALZT ", & + "TWHT6FLXT ","TWHT6FLYT ","TWHT6FLZT ","TWHT6MLXT ","TWHT6MLYT ","TWHT6MLZT ","TWHT6RDXT ", & + "TWHT6RDYT ","TWHT6RDZT ","TWHT6RPXI ","TWHT6RPYI ","TWHT6RPZI ","TWHT6TDXT ","TWHT6TDYT ", & + "TWHT6TDZT ","TWHT6TPXI ","TWHT6TPYI ","TWHT6TPZI ","TWHT7ALGXT","TWHT7ALGYT","TWHT7ALGZT", & + "TWHT7ALXT ","TWHT7ALYT ","TWHT7ALZT ","TWHT7FLXT ","TWHT7FLYT ","TWHT7FLZT ","TWHT7MLXT ", & + "TWHT7MLYT ","TWHT7MLZT ","TWHT7RDXT ","TWHT7RDYT ","TWHT7RDZT ","TWHT7RPXI ","TWHT7RPYI ", & + "TWHT7RPZI ","TWHT7TDXT ","TWHT7TDYT ","TWHT7TDZT ","TWHT7TPXI ","TWHT7TPYI ","TWHT7TPZI ", & + "TWHT8ALGXT","TWHT8ALGYT","TWHT8ALGZT","TWHT8ALXT ","TWHT8ALYT ","TWHT8ALZT ","TWHT8FLXT ", & + "TWHT8FLYT ","TWHT8FLZT ","TWHT8MLXT ","TWHT8MLYT ","TWHT8MLZT ","TWHT8RDXT ","TWHT8RDYT ", & + "TWHT8RDZT ","TWHT8RPXI ","TWHT8RPYI ","TWHT8RPZI ","TWHT8TDXT ","TWHT8TDYT ","TWHT8TDZT ", & + "TWHT8TPXI ","TWHT8TPYI ","TWHT8TPZI ","TWHT9ALGXT","TWHT9ALGYT","TWHT9ALGZT","TWHT9ALXT ", & + "TWHT9ALYT ","TWHT9ALZT ","TWHT9FLXT ","TWHT9FLYT ","TWHT9FLZT ","TWHT9MLXT ","TWHT9MLYT ", & + "TWHT9MLZT ","TWHT9RDXT ","TWHT9RDYT ","TWHT9RDZT ","TWHT9RPXI ","TWHT9RPYI ","TWHT9RPZI ", & + "TWHT9TDXT ","TWHT9TDYT ","TWHT9TDZT ","TWHT9TPXI ","TWHT9TPYI ","TWHT9TPZI ","TWRBSFXT ", & + "TWRBSFYT ","TWRBSFZT ","TWRBSMXT ","TWRBSMYT ","TWRBSMZT ","TWRCLRNC1 ","TWRCLRNC2 ", & + "TWRCLRNC3 ","TWRTPTDXI ","TWRTPTDYI ","TWRTPTDZI ","TWSTDEFL1 ","TWSTDEFL2 ","TWSTDEFL3 ", & + "YAWACCEL ","YAWAZN ","YAWAZP ","YAWBRFXN ","YAWBRFXP ","YAWBRFYN ","YAWBRFYP ", & + "YAWBRFZN ","YAWBRFZP ","YAWBRMXN ","YAWBRMXP ","YAWBRMYN ","YAWBRMYP ","YAWBRMZN ", & + "YAWBRMZP ","YAWBRRAXP ","YAWBRRAYP ","YAWBRRAZP ","YAWBRRDXT ","YAWBRRDYT ","YAWBRRDZT ", & + "YAWBRRVXP ","YAWBRRVYP ","YAWBRRVZP ","YAWBRTAGXP","YAWBRTAGYP","YAWBRTAGZP","YAWBRTAXP ", & + "YAWBRTAYP ","YAWBRTAZP ","YAWBRTDXI ","YAWBRTDXP ","YAWBRTDXT ","YAWBRTDYI ","YAWBRTDYP ", & + "YAWBRTDYT ","YAWBRTDZI ","YAWBRTDZP ","YAWBRTDZT ","YAWBRTVXP ","YAWBRTVYP ","YAWBRTVZP ", & + "YAWFRIMFP ","YAWFRIMOM ","YAWFRIMZ ","YAWPOS ","YAWPZN ","YAWPZP ","YAWRATE ", & + "YAWVZN ","YAWVZP "/) + INTEGER(IntKi), PARAMETER :: ParamIndxAry(1115) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) LSSTipPxa , PtchPMzc1 , PtchPMzc2 , PtchPMzc3 , PtchPMzc1 , PtchPMzc2 , PtchPMzc3 , & - HSShftA , HSShftV , HSSBrTq , HSShftA , HSShftPwr , HSShftTq , HSShftV , & - TipDyc1 , TipDyc2 , TipDyc3 , LSSGagAxa , LSSGagAxa , LSSGagAxa , LSShftFxa , & - LSShftFxa , LSShftFya , LSShftFys , LSShftFza , LSShftFzs , LSShftMxa , LSShftMxa , & - LSSGagMya , LSSGagMys , LSSGagMza , LSSGagMzs , LSSGagPxa , LSSGagPxa , LSSGagPxa , & - LSSGagVxa , LSSGagVxa , LSSGagVxa , LSShftFxa , LSShftFxa , LSShftFya , LSShftFys , & - LSShftFza , LSShftFzs , LSShftMxa , LSShftMxa , RotPwr , LSShftMxa , LSSTipAxa , & - LSSTipAxa , LSSTipAxa , LSSTipMya , LSSTipMys , LSSTipMza , LSSTipMzs , LSSTipPxa , & - LSSTipPxa , LSSTipPxa , LSSTipVxa , LSSTipVxa , LSSTipVxa , YawPzn , YawAzn , & - YawPzn , YawVzn , NcIMURAxs , NcIMURAys , NcIMURAzs , NcIMURVxs , NcIMURVys , & - NcIMURVzs , NcIMUTAgxs , NcIMUTAgys , NcIMUTAgzs , NcIMUTAxs , NcIMUTAys , NcIMUTAzs , & - NcIMUTVxs , NcIMUTVys , NcIMUTVzs , TipDxc1 , TipDxc2 , TipDxc3 , TipRDyb1 , & - TipRDyb2 , TipRDyb3 , PtchPMzc1 , PtchPMzc2 , PtchPMzc3 , PtchPMzc1 , PtchPMzc2 , & - PtchPMzc3 , PtfmTDzi , PtfmRDyi , PtfmRAxi , PtfmRAxt , PtfmRAyi , PtfmRAyt , & - PtfmRAzi , PtfmRAzt , PtfmRDxi , PtfmRDyi , PtfmRDzi , PtfmRDxi , PtfmRVxi , & - PtfmRVxt , PtfmRVyi , PtfmRVyt , PtfmRVzi , PtfmRVzt , PtfmTDxi , PtfmTDyi , & - PtfmTAgxi , PtfmTAgxt , PtfmTAgyi , PtfmTAgyt , PtfmTAgzi , PtfmTAgzt , PtfmTAxi , & - PtfmTAxt , PtfmTAyi , PtfmTAyt , PtfmTAzi , PtfmTAzt , PtfmTDxi , PtfmTDxt , & - PtfmTDyi , PtfmTDyt , PtfmTDzi , PtfmTDzt , PtfmTVxi , PtfmTVxt , PtfmTVyi , & - PtfmTVyt , PtfmTVzi , PtfmTVzt , PtfmRDzi , QD2_B1E1 , QD2_B1F1 , QD2_B1F2 , & - QD2_B2E1 , QD2_B2F1 , QD2_B2F2 , QD2_B3E1 , QD2_B3F1 , QD2_B3F2 , QD2_DrTr , & - QD2_GeAz , QD2_Hv , QD2_P , QD2_R , QD2_RFrl , QD2_Sg , QD2_Sw , & - QD2_Teet , QD2_TFA1 , QD2_TFA2 , QD2_TFrl , QD2_TSS1 , QD2_TSS2 , QD2_Y , & - QD2_Yaw , QD_B1E1 , QD_B1F1 , QD_B1F2 , QD_B2E1 , QD_B2F1 , QD_B2F2 , & - QD_B3E1 , QD_B3F1 , QD_B3F2 , QD_DrTr , QD_GeAz , QD_Hv , QD_P , & - QD_R , QD_RFrl , QD_Sg , QD_Sw , QD_Teet , QD_TFA1 , QD_TFA2 , & - QD_TFrl , QD_TSS1 , QD_TSS2 , QD_Y , QD_Yaw , Q_B1E1 , Q_B1F1 , & - Q_B1F2 , Q_B2E1 , Q_B2F1 , Q_B2F2 , Q_B3E1 , Q_B3F1 , Q_B3F2 , & - Q_DrTr , Q_GeAz , Q_Hv , Q_P , Q_R , Q_RFrl , Q_Sg , & - Q_Sw , Q_Teet , Q_TFA1 , Q_TFA2 , Q_TFrl , Q_TSS1 , Q_TSS2 , & - Q_Y , Q_Yaw , RFrlBrM , TipRDxb1 , TipRDxb2 , TipRDxb3 , RootFxb1 , & - RootFxb2 , RootFxb3 , RootFxc1 , RootFxc2 , RootFxc3 , RootFyb1 , RootFyb2 , & - RootFyb3 , RootFyc1 , RootFyc2 , RootFyc3 , RootFzc1 , RootFzc2 , RootFzc3 , & - RootFzc1 , RootFzc2 , RootFzc3 , RootMxb1 , RootMxb2 , RootMxb3 , RootMyb1 , & - RootMyb2 , RootMyb3 , RootMxc1 , RootMxc2 , RootMxc3 , RootMyc1 , RootMyc2 , & - RootMyc3 , RootMxb1 , RootMxb2 , RootMxb3 , RootMxc1 , RootMxc2 , RootMxc3 , & - RootMyb1 , RootMyb2 , RootMyb3 , RootMyc1 , RootMyc2 , RootMyc3 , RootMzc1 , & - RootMzc2 , RootMzc3 , RootMzc1 , RootMzc2 , RootMzc3 , LSSTipAxa , RotFurlP , & - RotFurlA , RotFurlP , RotFurlV , RotPwr , LSSTipVxa , TeetAya , TeetPya , & - TeetVya , LSShftFxa , LSShftMxa , Spn1ALgxb1 , Spn1ALgxb2 , Spn1ALgxb3 , Spn1ALgyb1 , & - Spn1ALgyb2 , Spn1ALgyb3 , Spn1ALgzb1 , Spn1ALgzb2 , Spn1ALgzb3 , Spn1ALxb1 , Spn1ALxb2 , & - Spn1ALxb3 , Spn1ALyb1 , Spn1ALyb2 , Spn1ALyb3 , Spn1ALzb1 , Spn1ALzb2 , Spn1ALzb3 , & - Spn1FLxb1 , Spn1FLxb2 , Spn1FLxb3 , Spn1FLyb1 , Spn1FLyb2 , Spn1FLyb3 , Spn1FLzb1 , & - Spn1FLzb2 , Spn1FLzb3 , Spn1MLxb1 , Spn1MLxb2 , Spn1MLxb3 , Spn1MLyb1 , Spn1MLyb2 , & - Spn1MLyb3 , Spn1MLzb1 , Spn1MLzb2 , Spn1MLzb3 , Spn1RDxb1 , Spn1RDxb2 , Spn1RDxb3 , & - Spn1RDyb1 , Spn1RDyb2 , Spn1RDyb3 , Spn1RDzb1 , Spn1RDzb2 , Spn1RDzb3 , Spn1TDxb1 , & - Spn1TDxb2 , Spn1TDxb3 , Spn1TDyb1 , Spn1TDyb2 , Spn1TDyb3 , Spn1TDzb1 , Spn1TDzb2 , & - Spn1TDzb3 , Spn2ALgxb1 , Spn2ALgxb2 , Spn2ALgxb3 , Spn2ALgyb1 , Spn2ALgyb2 , Spn2ALgyb3 , & - Spn2ALgzb1 , Spn2ALgzb2 , Spn2ALgzb3 , Spn2ALxb1 , Spn2ALxb2 , Spn2ALxb3 , Spn2ALyb1 , & - Spn2ALyb2 , Spn2ALyb3 , Spn2ALzb1 , Spn2ALzb2 , Spn2ALzb3 , Spn2FLxb1 , Spn2FLxb2 , & - Spn2FLxb3 , Spn2FLyb1 , Spn2FLyb2 , Spn2FLyb3 , Spn2FLzb1 , Spn2FLzb2 , Spn2FLzb3 , & - Spn2MLxb1 , Spn2MLxb2 , Spn2MLxb3 , Spn2MLyb1 , Spn2MLyb2 , Spn2MLyb3 , Spn2MLzb1 , & - Spn2MLzb2 , Spn2MLzb3 , Spn2RDxb1 , Spn2RDxb2 , Spn2RDxb3 , Spn2RDyb1 , Spn2RDyb2 , & - Spn2RDyb3 , Spn2RDzb1 , Spn2RDzb2 , Spn2RDzb3 , Spn2TDxb1 , Spn2TDxb2 , Spn2TDxb3 , & - Spn2TDyb1 , Spn2TDyb2 , Spn2TDyb3 , Spn2TDzb1 , Spn2TDzb2 , Spn2TDzb3 , Spn3ALgxb1 , & - Spn3ALgxb2 , Spn3ALgxb3 , Spn3ALgyb1 , Spn3ALgyb2 , Spn3ALgyb3 , Spn3ALgzb1 , Spn3ALgzb2 , & - Spn3ALgzb3 , Spn3ALxb1 , Spn3ALxb2 , Spn3ALxb3 , Spn3ALyb1 , Spn3ALyb2 , Spn3ALyb3 , & - Spn3ALzb1 , Spn3ALzb2 , Spn3ALzb3 , Spn3FLxb1 , Spn3FLxb2 , Spn3FLxb3 , Spn3FLyb1 , & - Spn3FLyb2 , Spn3FLyb3 , Spn3FLzb1 , Spn3FLzb2 , Spn3FLzb3 , Spn3MLxb1 , Spn3MLxb2 , & - Spn3MLxb3 , Spn3MLyb1 , Spn3MLyb2 , Spn3MLyb3 , Spn3MLzb1 , Spn3MLzb2 , Spn3MLzb3 , & - Spn3RDxb1 , Spn3RDxb2 , Spn3RDxb3 , Spn3RDyb1 , Spn3RDyb2 , Spn3RDyb3 , Spn3RDzb1 , & - Spn3RDzb2 , Spn3RDzb3 , Spn3TDxb1 , Spn3TDxb2 , Spn3TDxb3 , Spn3TDyb1 , Spn3TDyb2 , & - Spn3TDyb3 , Spn3TDzb1 , Spn3TDzb2 , Spn3TDzb3 , Spn4ALgxb1 , Spn4ALgxb2 , Spn4ALgxb3 , & - Spn4ALgyb1 , Spn4ALgyb2 , Spn4ALgyb3 , Spn4ALgzb1 , Spn4ALgzb2 , Spn4ALgzb3 , Spn4ALxb1 , & - Spn4ALxb2 , Spn4ALxb3 , Spn4ALyb1 , Spn4ALyb2 , Spn4ALyb3 , Spn4ALzb1 , Spn4ALzb2 , & - Spn4ALzb3 , Spn4FLxb1 , Spn4FLxb2 , Spn4FLxb3 , Spn4FLyb1 , Spn4FLyb2 , Spn4FLyb3 , & - Spn4FLzb1 , Spn4FLzb2 , Spn4FLzb3 , Spn4MLxb1 , Spn4MLxb2 , Spn4MLxb3 , Spn4MLyb1 , & - Spn4MLyb2 , Spn4MLyb3 , Spn4MLzb1 , Spn4MLzb2 , Spn4MLzb3 , Spn4RDxb1 , Spn4RDxb2 , & - Spn4RDxb3 , Spn4RDyb1 , Spn4RDyb2 , Spn4RDyb3 , Spn4RDzb1 , Spn4RDzb2 , Spn4RDzb3 , & - Spn4TDxb1 , Spn4TDxb2 , Spn4TDxb3 , Spn4TDyb1 , Spn4TDyb2 , Spn4TDyb3 , Spn4TDzb1 , & - Spn4TDzb2 , Spn4TDzb3 , Spn5ALgxb1 , Spn5ALgxb2 , Spn5ALgxb3 , Spn5ALgyb1 , Spn5ALgyb2 , & - Spn5ALgyb3 , Spn5ALgzb1 , Spn5ALgzb2 , Spn5ALgzb3 , Spn5ALxb1 , Spn5ALxb2 , Spn5ALxb3 , & - Spn5ALyb1 , Spn5ALyb2 , Spn5ALyb3 , Spn5ALzb1 , Spn5ALzb2 , Spn5ALzb3 , Spn5FLxb1 , & - Spn5FLxb2 , Spn5FLxb3 , Spn5FLyb1 , Spn5FLyb2 , Spn5FLyb3 , Spn5FLzb1 , Spn5FLzb2 , & - Spn5FLzb3 , Spn5MLxb1 , Spn5MLxb2 , Spn5MLxb3 , Spn5MLyb1 , Spn5MLyb2 , Spn5MLyb3 , & - Spn5MLzb1 , Spn5MLzb2 , Spn5MLzb3 , Spn5RDxb1 , Spn5RDxb2 , Spn5RDxb3 , Spn5RDyb1 , & - Spn5RDyb2 , Spn5RDyb3 , Spn5RDzb1 , Spn5RDzb2 , Spn5RDzb3 , Spn5TDxb1 , Spn5TDxb2 , & - Spn5TDxb3 , Spn5TDyb1 , Spn5TDyb2 , Spn5TDyb3 , Spn5TDzb1 , Spn5TDzb2 , Spn5TDzb3 , & - Spn6ALgxb1 , Spn6ALgxb2 , Spn6ALgxb3 , Spn6ALgyb1 , Spn6ALgyb2 , Spn6ALgyb3 , Spn6ALgzb1 , & - Spn6ALgzb2 , Spn6ALgzb3 , Spn6ALxb1 , Spn6ALxb2 , Spn6ALxb3 , Spn6ALyb1 , Spn6ALyb2 , & - Spn6ALyb3 , Spn6ALzb1 , Spn6ALzb2 , Spn6ALzb3 , Spn6FLxb1 , Spn6FLxb2 , Spn6FLxb3 , & - Spn6FLyb1 , Spn6FLyb2 , Spn6FLyb3 , Spn6FLzb1 , Spn6FLzb2 , Spn6FLzb3 , Spn6MLxb1 , & - Spn6MLxb2 , Spn6MLxb3 , Spn6MLyb1 , Spn6MLyb2 , Spn6MLyb3 , Spn6MLzb1 , Spn6MLzb2 , & - Spn6MLzb3 , Spn6RDxb1 , Spn6RDxb2 , Spn6RDxb3 , Spn6RDyb1 , Spn6RDyb2 , Spn6RDyb3 , & - Spn6RDzb1 , Spn6RDzb2 , Spn6RDzb3 , Spn6TDxb1 , Spn6TDxb2 , Spn6TDxb3 , Spn6TDyb1 , & - Spn6TDyb2 , Spn6TDyb3 , Spn6TDzb1 , Spn6TDzb2 , Spn6TDzb3 , Spn7ALgxb1 , Spn7ALgxb2 , & - Spn7ALgxb3 , Spn7ALgyb1 , Spn7ALgyb2 , Spn7ALgyb3 , Spn7ALgzb1 , Spn7ALgzb2 , Spn7ALgzb3 , & - Spn7ALxb1 , Spn7ALxb2 , Spn7ALxb3 , Spn7ALyb1 , Spn7ALyb2 , Spn7ALyb3 , Spn7ALzb1 , & - Spn7ALzb2 , Spn7ALzb3 , Spn7FLxb1 , Spn7FLxb2 , Spn7FLxb3 , Spn7FLyb1 , Spn7FLyb2 , & - Spn7FLyb3 , Spn7FLzb1 , Spn7FLzb2 , Spn7FLzb3 , Spn7MLxb1 , Spn7MLxb2 , Spn7MLxb3 , & - Spn7MLyb1 , Spn7MLyb2 , Spn7MLyb3 , Spn7MLzb1 , Spn7MLzb2 , Spn7MLzb3 , Spn7RDxb1 , & - Spn7RDxb2 , Spn7RDxb3 , Spn7RDyb1 , Spn7RDyb2 , Spn7RDyb3 , Spn7RDzb1 , Spn7RDzb2 , & - Spn7RDzb3 , Spn7TDxb1 , Spn7TDxb2 , Spn7TDxb3 , Spn7TDyb1 , Spn7TDyb2 , Spn7TDyb3 , & - Spn7TDzb1 , Spn7TDzb2 , Spn7TDzb3 , Spn8ALgxb1 , Spn8ALgxb2 , Spn8ALgxb3 , Spn8ALgyb1 , & - Spn8ALgyb2 , Spn8ALgyb3 , Spn8ALgzb1 , Spn8ALgzb2 , Spn8ALgzb3 , Spn8ALxb1 , Spn8ALxb2 , & - Spn8ALxb3 , Spn8ALyb1 , Spn8ALyb2 , Spn8ALyb3 , Spn8ALzb1 , Spn8ALzb2 , Spn8ALzb3 , & - Spn8FLxb1 , Spn8FLxb2 , Spn8FLxb3 , Spn8FLyb1 , Spn8FLyb2 , Spn8FLyb3 , Spn8FLzb1 , & - Spn8FLzb2 , Spn8FLzb3 , Spn8MLxb1 , Spn8MLxb2 , Spn8MLxb3 , Spn8MLyb1 , Spn8MLyb2 , & - Spn8MLyb3 , Spn8MLzb1 , Spn8MLzb2 , Spn8MLzb3 , Spn8RDxb1 , Spn8RDxb2 , Spn8RDxb3 , & - Spn8RDyb1 , Spn8RDyb2 , Spn8RDyb3 , Spn8RDzb1 , Spn8RDzb2 , Spn8RDzb3 , Spn8TDxb1 , & - Spn8TDxb2 , Spn8TDxb3 , Spn8TDyb1 , Spn8TDyb2 , Spn8TDyb3 , Spn8TDzb1 , Spn8TDzb2 , & - Spn8TDzb3 , Spn9ALgxb1 , Spn9ALgxb2 , Spn9ALgxb3 , Spn9ALgyb1 , Spn9ALgyb2 , Spn9ALgyb3 , & - Spn9ALgzb1 , Spn9ALgzb2 , Spn9ALgzb3 , Spn9ALxb1 , Spn9ALxb2 , Spn9ALxb3 , Spn9ALyb1 , & - Spn9ALyb2 , Spn9ALyb3 , Spn9ALzb1 , Spn9ALzb2 , Spn9ALzb3 , Spn9FLxb1 , Spn9FLxb2 , & - Spn9FLxb3 , Spn9FLyb1 , Spn9FLyb2 , Spn9FLyb3 , Spn9FLzb1 , Spn9FLzb2 , Spn9FLzb3 , & - Spn9MLxb1 , Spn9MLxb2 , Spn9MLxb3 , Spn9MLyb1 , Spn9MLyb2 , Spn9MLyb3 , Spn9MLzb1 , & - Spn9MLzb2 , Spn9MLzb3 , Spn9RDxb1 , Spn9RDxb2 , Spn9RDxb3 , Spn9RDyb1 , Spn9RDyb2 , & - Spn9RDyb3 , Spn9RDzb1 , Spn9RDzb2 , Spn9RDzb3 , Spn9TDxb1 , Spn9TDxb2 , Spn9TDxb3 , & - Spn9TDyb1 , Spn9TDyb2 , Spn9TDyb3 , Spn9TDzb1 , Spn9TDzb2 , Spn9TDzb3 , TailFurlP , & - TailFurlA , TailFurlP , TailFurlV , TeetAya , TeetPya , TeetPya , TeetVya , & - TFrlBrM , TipClrnc1 , TipClrnc2 , TipClrnc3 , TipALgxb1 , TipALgxb2 , TipALgxb3 , & - TipALgyb1 , TipALgyb2 , TipALgyb3 , TipALgzb1 , TipALgzb2 , TipALgzb3 , TipALxb1 , & - TipALxb2 , TipALxb3 , TipALyb1 , TipALyb2 , TipALyb3 , TipALzb1 , TipALzb2 , & - TipALzb3 , TipClrnc1 , TipClrnc2 , TipClrnc3 , TipDxb1 , TipDxb2 , TipDxb3 , & - TipDxc1 , TipDxc2 , TipDxc3 , TipDyb1 , TipDyb2 , TipDyb3 , TipDyc1 , & - TipDyc2 , TipDyc3 , TipDzc1 , TipDzc2 , TipDzc3 , TipDzc1 , TipDzc2 , & - TipDzc3 , TipRDxb1 , TipRDxb2 , TipRDxb3 , TipRDyb1 , TipRDyb2 , TipRDyb3 , & - TipRDzc1 , TipRDzc2 , TipRDzc3 , TipRDzc1 , TipRDzc2 , TipRDzc3 , YawBrTDzt , & - YawBrTDxt , YawBrRDyt , YawBrRDxt , YawBrTDyt , YawBrRDzt , TwHt1ALgxt , TwHt1ALgyt , & - TwHt1ALgzt , TwHt1ALxt , TwHt1ALyt , TwHt1ALzt , TwHt1FLxt , TwHt1FLyt , TwHt1FLzt , & - TwHt1MLxt , TwHt1MLyt , TwHt1MLzt , TwHt1RDxt , TwHt1RDyt , TwHt1RDzt , TwHt1RPxi , & - TwHt1RPyi , TwHt1RPzi , TwHt1TDxt , TwHt1TDyt , TwHt1TDzt , TwHt1TPxi , TwHt1TPyi , & - TwHt1TPzi , TwHt2ALgxt , TwHt2ALgyt , TwHt2ALgzt , TwHt2ALxt , TwHt2ALyt , TwHt2ALzt , & - TwHt2FLxt , TwHt2FLyt , TwHt2FLzt , TwHt2MLxt , TwHt2MLyt , TwHt2MLzt , TwHt2RDxt , & - TwHt2RDyt , TwHt2RDzt , TwHt2RPxi , TwHt2RPyi , TwHt2RPzi , TwHt2TDxt , TwHt2TDyt , & - TwHt2TDzt , TwHt2TPxi , TwHt2TPyi , TwHt2TPzi , TwHt3ALgxt , TwHt3ALgyt , TwHt3ALgzt , & - TwHt3ALxt , TwHt3ALyt , TwHt3ALzt , TwHt3FLxt , TwHt3FLyt , TwHt3FLzt , TwHt3MLxt , & - TwHt3MLyt , TwHt3MLzt , TwHt3RDxt , TwHt3RDyt , TwHt3RDzt , TwHt3RPxi , TwHt3RPyi , & - TwHt3RPzi , TwHt3TDxt , TwHt3TDyt , TwHt3TDzt , TwHt3TPxi , TwHt3TPyi , TwHt3TPzi , & - TwHt4ALgxt , TwHt4ALgyt , TwHt4ALgzt , TwHt4ALxt , TwHt4ALyt , TwHt4ALzt , TwHt4FLxt , & - TwHt4FLyt , TwHt4FLzt , TwHt4MLxt , TwHt4MLyt , TwHt4MLzt , TwHt4RDxt , TwHt4RDyt , & - TwHt4RDzt , TwHt4RPxi , TwHt4RPyi , TwHt4RPzi , TwHt4TDxt , TwHt4TDyt , TwHt4TDzt , & - TwHt4TPxi , TwHt4TPyi , TwHt4TPzi , TwHt5ALgxt , TwHt5ALgyt , TwHt5ALgzt , TwHt5ALxt , & - TwHt5ALyt , TwHt5ALzt , TwHt5FLxt , TwHt5FLyt , TwHt5FLzt , TwHt5MLxt , TwHt5MLyt , & - TwHt5MLzt , TwHt5RDxt , TwHt5RDyt , TwHt5RDzt , TwHt5RPxi , TwHt5RPyi , TwHt5RPzi , & - TwHt5TDxt , TwHt5TDyt , TwHt5TDzt , TwHt5TPxi , TwHt5TPyi , TwHt5TPzi , TwHt6ALgxt , & - TwHt6ALgyt , TwHt6ALgzt , TwHt6ALxt , TwHt6ALyt , TwHt6ALzt , TwHt6FLxt , TwHt6FLyt , & - TwHt6FLzt , TwHt6MLxt , TwHt6MLyt , TwHt6MLzt , TwHt6RDxt , TwHt6RDyt , TwHt6RDzt , & - TwHt6RPxi , TwHt6RPyi , TwHt6RPzi , TwHt6TDxt , TwHt6TDyt , TwHt6TDzt , TwHt6TPxi , & - TwHt6TPyi , TwHt6TPzi , TwHt7ALgxt , TwHt7ALgyt , TwHt7ALgzt , TwHt7ALxt , TwHt7ALyt , & - TwHt7ALzt , TwHt7FLxt , TwHt7FLyt , TwHt7FLzt , TwHt7MLxt , TwHt7MLyt , TwHt7MLzt , & - TwHt7RDxt , TwHt7RDyt , TwHt7RDzt , TwHt7RPxi , TwHt7RPyi , TwHt7RPzi , TwHt7TDxt , & - TwHt7TDyt , TwHt7TDzt , TwHt7TPxi , TwHt7TPyi , TwHt7TPzi , TwHt8ALgxt , TwHt8ALgyt , & - TwHt8ALgzt , TwHt8ALxt , TwHt8ALyt , TwHt8ALzt , TwHt8FLxt , TwHt8FLyt , TwHt8FLzt , & - TwHt8MLxt , TwHt8MLyt , TwHt8MLzt , TwHt8RDxt , TwHt8RDyt , TwHt8RDzt , TwHt8RPxi , & - TwHt8RPyi , TwHt8RPzi , TwHt8TDxt , TwHt8TDyt , TwHt8TDzt , TwHt8TPxi , TwHt8TPyi , & - TwHt8TPzi , TwHt9ALgxt , TwHt9ALgyt , TwHt9ALgzt , TwHt9ALxt , TwHt9ALyt , TwHt9ALzt , & - TwHt9FLxt , TwHt9FLyt , TwHt9FLzt , TwHt9MLxt , TwHt9MLyt , TwHt9MLzt , TwHt9RDxt , & - TwHt9RDyt , TwHt9RDzt , TwHt9RPxi , TwHt9RPyi , TwHt9RPzi , TwHt9TDxt , TwHt9TDyt , & - TwHt9TDzt , TwHt9TPxi , TwHt9TPyi , TwHt9TPzi , TwrBsFxt , TwrBsFyt , TwrBsFzt , & - TwrBsMxt , TwrBsMyt , TwrBsMzt , TipClrnc1 , TipClrnc2 , TipClrnc3 , TwrTpTDxi , & - TwrTpTDyi , TwrTpTDzi , TipRDzc1 , TipRDzc2 , TipRDzc3 , YawAzn , YawAzn , & - YawAzn , YawBrFxn , YawBrFxp , YawBrFyn , YawBrFyp , YawBrFzn , YawBrFzn , & - YawBrMxn , YawBrMxp , YawBrMyn , YawBrMyp , YawBrMzn , YawBrMzn , YawBrRAxp , & - YawBrRAyp , YawBrRAzp , YawBrRDxt , YawBrRDyt , YawBrRDzt , YawBrRVxp , YawBrRVyp , & - YawBrRVzp , YawBrTAgxp , YawBrTAgyp , YawBrTAgzp , YawBrTAxp , YawBrTAyp , YawBrTAzp , & - TwrTpTDxi , YawBrTDxp , YawBrTDxt , TwrTpTDyi , YawBrTDyp , YawBrTDyt , TwrTpTDzi , & - YawBrTDzp , YawBrTDzt , YawBrTVxp , YawBrTVyp , YawBrTVzp , YawPzn , YawPzn , & - YawPzn , YawVzn , YawVzn , YawVzn /) - CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry(1110) = (/ & ! This lists the units corresponding to the allowed parameters + dOmegaYF , HSShftA , HSShftV , HSSBrTq , HSShftA , HSShftPwr , HSShftTq , & + HSShftV , TipDyc1 , TipDyc2 , TipDyc3 , LSSGagAxa , LSSGagAxa , LSSGagAxa , & + LSShftFxa , LSShftFxa , LSShftFya , LSShftFys , LSShftFza , LSShftFzs , LSShftMxa , & + LSShftMxa , LSSGagMya , LSSGagMys , LSSGagMza , LSSGagMzs , LSSGagPxa , LSSGagPxa , & + LSSGagPxa , LSSGagVxa , LSSGagVxa , LSSGagVxa , LSShftFxa , LSShftFxa , LSShftFya , & + LSShftFys , LSShftFza , LSShftFzs , LSShftMxa , LSShftMxa , RotPwr , LSShftMxa , & + LSSTipAxa , LSSTipAxa , LSSTipAxa , LSSTipMya , LSSTipMys , LSSTipMza , LSSTipMzs , & + LSSTipPxa , LSSTipPxa , LSSTipPxa , LSSTipVxa , LSSTipVxa , LSSTipVxa , YawPzn , & + YawAzn , YawPzn , YawVzn , NcIMURAxs , NcIMURAys , NcIMURAzs , NcIMURVxs , & + NcIMURVys , NcIMURVzs , NcIMUTAgxs , NcIMUTAgys , NcIMUTAgzs , NcIMUTAxs , NcIMUTAys , & + NcIMUTAzs , NcIMUTVxs , NcIMUTVys , NcIMUTVzs , OmegaYF , TipDxc1 , TipDxc2 , & + TipDxc3 , TipRDyb1 , TipRDyb2 , TipRDyb3 , PtchPMzc1 , PtchPMzc2 , PtchPMzc3 , & + PtchPMzc1 , PtchPMzc2 , PtchPMzc3 , PtfmTDzi , PtfmRDyi , PtfmRAxi , PtfmRAxt , & + PtfmRAyi , PtfmRAyt , PtfmRAzi , PtfmRAzt , PtfmRDxi , PtfmRDyi , PtfmRDzi , & + PtfmRDxi , PtfmRVxi , PtfmRVxt , PtfmRVyi , PtfmRVyt , PtfmRVzi , PtfmRVzt , & + PtfmTDxi , PtfmTDyi , PtfmTAgxi , PtfmTAgxt , PtfmTAgyi , PtfmTAgyt , PtfmTAgzi , & + PtfmTAgzt , PtfmTAxi , PtfmTAxt , PtfmTAyi , PtfmTAyt , PtfmTAzi , PtfmTAzt , & + PtfmTDxi , PtfmTDxt , PtfmTDyi , PtfmTDyt , PtfmTDzi , PtfmTDzt , PtfmTVxi , & + PtfmTVxt , PtfmTVyi , PtfmTVyt , PtfmTVzi , PtfmTVzt , PtfmRDzi , QD2_B1E1 , & + QD2_B1F1 , QD2_B1F2 , QD2_B2E1 , QD2_B2F1 , QD2_B2F2 , QD2_B3E1 , QD2_B3F1 , & + QD2_B3F2 , QD2_DrTr , QD2_GeAz , QD2_Hv , QD2_P , QD2_R , QD2_RFrl , & + QD2_Sg , QD2_Sw , QD2_Teet , QD2_TFA1 , QD2_TFA2 , QD2_TFrl , QD2_TSS1 , & + QD2_TSS2 , QD2_Y , QD2_Yaw , QD_B1E1 , QD_B1F1 , QD_B1F2 , QD_B2E1 , & + QD_B2F1 , QD_B2F2 , QD_B3E1 , QD_B3F1 , QD_B3F2 , QD_DrTr , QD_GeAz , & + QD_Hv , QD_P , QD_R , QD_RFrl , QD_Sg , QD_Sw , QD_Teet , & + QD_TFA1 , QD_TFA2 , QD_TFrl , QD_TSS1 , QD_TSS2 , QD_Y , QD_Yaw , & + Q_B1E1 , Q_B1F1 , Q_B1F2 , Q_B2E1 , Q_B2F1 , Q_B2F2 , Q_B3E1 , & + Q_B3F1 , Q_B3F2 , Q_DrTr , Q_GeAz , Q_Hv , Q_P , Q_R , & + Q_RFrl , Q_Sg , Q_Sw , Q_Teet , Q_TFA1 , Q_TFA2 , Q_TFrl , & + Q_TSS1 , Q_TSS2 , Q_Y , Q_Yaw , RFrlBrM , TipRDxb1 , TipRDxb2 , & + TipRDxb3 , RootFxb1 , RootFxb2 , RootFxb3 , RootFxc1 , RootFxc2 , RootFxc3 , & + RootFyb1 , RootFyb2 , RootFyb3 , RootFyc1 , RootFyc2 , RootFyc3 , RootFzc1 , & + RootFzc2 , RootFzc3 , RootFzc1 , RootFzc2 , RootFzc3 , RootMxb1 , RootMxb2 , & + RootMxb3 , RootMyb1 , RootMyb2 , RootMyb3 , RootMxc1 , RootMxc2 , RootMxc3 , & + RootMyc1 , RootMyc2 , RootMyc3 , RootMxb1 , RootMxb2 , RootMxb3 , RootMxc1 , & + RootMxc2 , RootMxc3 , RootMyb1 , RootMyb2 , RootMyb3 , RootMyc1 , RootMyc2 , & + RootMyc3 , RootMzc1 , RootMzc2 , RootMzc3 , RootMzc1 , RootMzc2 , RootMzc3 , & + LSSTipAxa , RotFurlP , RotFurlA , RotFurlP , RotFurlV , RotPwr , LSSTipVxa , & + TeetAya , TeetPya , TeetVya , LSShftFxa , LSShftMxa , Spn1ALgxb1 , Spn1ALgxb2 , & + Spn1ALgxb3 , Spn1ALgyb1 , Spn1ALgyb2 , Spn1ALgyb3 , Spn1ALgzb1 , Spn1ALgzb2 , Spn1ALgzb3 , & + Spn1ALxb1 , Spn1ALxb2 , Spn1ALxb3 , Spn1ALyb1 , Spn1ALyb2 , Spn1ALyb3 , Spn1ALzb1 , & + Spn1ALzb2 , Spn1ALzb3 , Spn1FLxb1 , Spn1FLxb2 , Spn1FLxb3 , Spn1FLyb1 , Spn1FLyb2 , & + Spn1FLyb3 , Spn1FLzb1 , Spn1FLzb2 , Spn1FLzb3 , Spn1MLxb1 , Spn1MLxb2 , Spn1MLxb3 , & + Spn1MLyb1 , Spn1MLyb2 , Spn1MLyb3 , Spn1MLzb1 , Spn1MLzb2 , Spn1MLzb3 , Spn1RDxb1 , & + Spn1RDxb2 , Spn1RDxb3 , Spn1RDyb1 , Spn1RDyb2 , Spn1RDyb3 , Spn1RDzb1 , Spn1RDzb2 , & + Spn1RDzb3 , Spn1TDxb1 , Spn1TDxb2 , Spn1TDxb3 , Spn1TDyb1 , Spn1TDyb2 , Spn1TDyb3 , & + Spn1TDzb1 , Spn1TDzb2 , Spn1TDzb3 , Spn2ALgxb1 , Spn2ALgxb2 , Spn2ALgxb3 , Spn2ALgyb1 , & + Spn2ALgyb2 , Spn2ALgyb3 , Spn2ALgzb1 , Spn2ALgzb2 , Spn2ALgzb3 , Spn2ALxb1 , Spn2ALxb2 , & + Spn2ALxb3 , Spn2ALyb1 , Spn2ALyb2 , Spn2ALyb3 , Spn2ALzb1 , Spn2ALzb2 , Spn2ALzb3 , & + Spn2FLxb1 , Spn2FLxb2 , Spn2FLxb3 , Spn2FLyb1 , Spn2FLyb2 , Spn2FLyb3 , Spn2FLzb1 , & + Spn2FLzb2 , Spn2FLzb3 , Spn2MLxb1 , Spn2MLxb2 , Spn2MLxb3 , Spn2MLyb1 , Spn2MLyb2 , & + Spn2MLyb3 , Spn2MLzb1 , Spn2MLzb2 , Spn2MLzb3 , Spn2RDxb1 , Spn2RDxb2 , Spn2RDxb3 , & + Spn2RDyb1 , Spn2RDyb2 , Spn2RDyb3 , Spn2RDzb1 , Spn2RDzb2 , Spn2RDzb3 , Spn2TDxb1 , & + Spn2TDxb2 , Spn2TDxb3 , Spn2TDyb1 , Spn2TDyb2 , Spn2TDyb3 , Spn2TDzb1 , Spn2TDzb2 , & + Spn2TDzb3 , Spn3ALgxb1 , Spn3ALgxb2 , Spn3ALgxb3 , Spn3ALgyb1 , Spn3ALgyb2 , Spn3ALgyb3 , & + Spn3ALgzb1 , Spn3ALgzb2 , Spn3ALgzb3 , Spn3ALxb1 , Spn3ALxb2 , Spn3ALxb3 , Spn3ALyb1 , & + Spn3ALyb2 , Spn3ALyb3 , Spn3ALzb1 , Spn3ALzb2 , Spn3ALzb3 , Spn3FLxb1 , Spn3FLxb2 , & + Spn3FLxb3 , Spn3FLyb1 , Spn3FLyb2 , Spn3FLyb3 , Spn3FLzb1 , Spn3FLzb2 , Spn3FLzb3 , & + Spn3MLxb1 , Spn3MLxb2 , Spn3MLxb3 , Spn3MLyb1 , Spn3MLyb2 , Spn3MLyb3 , Spn3MLzb1 , & + Spn3MLzb2 , Spn3MLzb3 , Spn3RDxb1 , Spn3RDxb2 , Spn3RDxb3 , Spn3RDyb1 , Spn3RDyb2 , & + Spn3RDyb3 , Spn3RDzb1 , Spn3RDzb2 , Spn3RDzb3 , Spn3TDxb1 , Spn3TDxb2 , Spn3TDxb3 , & + Spn3TDyb1 , Spn3TDyb2 , Spn3TDyb3 , Spn3TDzb1 , Spn3TDzb2 , Spn3TDzb3 , Spn4ALgxb1 , & + Spn4ALgxb2 , Spn4ALgxb3 , Spn4ALgyb1 , Spn4ALgyb2 , Spn4ALgyb3 , Spn4ALgzb1 , Spn4ALgzb2 , & + Spn4ALgzb3 , Spn4ALxb1 , Spn4ALxb2 , Spn4ALxb3 , Spn4ALyb1 , Spn4ALyb2 , Spn4ALyb3 , & + Spn4ALzb1 , Spn4ALzb2 , Spn4ALzb3 , Spn4FLxb1 , Spn4FLxb2 , Spn4FLxb3 , Spn4FLyb1 , & + Spn4FLyb2 , Spn4FLyb3 , Spn4FLzb1 , Spn4FLzb2 , Spn4FLzb3 , Spn4MLxb1 , Spn4MLxb2 , & + Spn4MLxb3 , Spn4MLyb1 , Spn4MLyb2 , Spn4MLyb3 , Spn4MLzb1 , Spn4MLzb2 , Spn4MLzb3 , & + Spn4RDxb1 , Spn4RDxb2 , Spn4RDxb3 , Spn4RDyb1 , Spn4RDyb2 , Spn4RDyb3 , Spn4RDzb1 , & + Spn4RDzb2 , Spn4RDzb3 , Spn4TDxb1 , Spn4TDxb2 , Spn4TDxb3 , Spn4TDyb1 , Spn4TDyb2 , & + Spn4TDyb3 , Spn4TDzb1 , Spn4TDzb2 , Spn4TDzb3 , Spn5ALgxb1 , Spn5ALgxb2 , Spn5ALgxb3 , & + Spn5ALgyb1 , Spn5ALgyb2 , Spn5ALgyb3 , Spn5ALgzb1 , Spn5ALgzb2 , Spn5ALgzb3 , Spn5ALxb1 , & + Spn5ALxb2 , Spn5ALxb3 , Spn5ALyb1 , Spn5ALyb2 , Spn5ALyb3 , Spn5ALzb1 , Spn5ALzb2 , & + Spn5ALzb3 , Spn5FLxb1 , Spn5FLxb2 , Spn5FLxb3 , Spn5FLyb1 , Spn5FLyb2 , Spn5FLyb3 , & + Spn5FLzb1 , Spn5FLzb2 , Spn5FLzb3 , Spn5MLxb1 , Spn5MLxb2 , Spn5MLxb3 , Spn5MLyb1 , & + Spn5MLyb2 , Spn5MLyb3 , Spn5MLzb1 , Spn5MLzb2 , Spn5MLzb3 , Spn5RDxb1 , Spn5RDxb2 , & + Spn5RDxb3 , Spn5RDyb1 , Spn5RDyb2 , Spn5RDyb3 , Spn5RDzb1 , Spn5RDzb2 , Spn5RDzb3 , & + Spn5TDxb1 , Spn5TDxb2 , Spn5TDxb3 , Spn5TDyb1 , Spn5TDyb2 , Spn5TDyb3 , Spn5TDzb1 , & + Spn5TDzb2 , Spn5TDzb3 , Spn6ALgxb1 , Spn6ALgxb2 , Spn6ALgxb3 , Spn6ALgyb1 , Spn6ALgyb2 , & + Spn6ALgyb3 , Spn6ALgzb1 , Spn6ALgzb2 , Spn6ALgzb3 , Spn6ALxb1 , Spn6ALxb2 , Spn6ALxb3 , & + Spn6ALyb1 , Spn6ALyb2 , Spn6ALyb3 , Spn6ALzb1 , Spn6ALzb2 , Spn6ALzb3 , Spn6FLxb1 , & + Spn6FLxb2 , Spn6FLxb3 , Spn6FLyb1 , Spn6FLyb2 , Spn6FLyb3 , Spn6FLzb1 , Spn6FLzb2 , & + Spn6FLzb3 , Spn6MLxb1 , Spn6MLxb2 , Spn6MLxb3 , Spn6MLyb1 , Spn6MLyb2 , Spn6MLyb3 , & + Spn6MLzb1 , Spn6MLzb2 , Spn6MLzb3 , Spn6RDxb1 , Spn6RDxb2 , Spn6RDxb3 , Spn6RDyb1 , & + Spn6RDyb2 , Spn6RDyb3 , Spn6RDzb1 , Spn6RDzb2 , Spn6RDzb3 , Spn6TDxb1 , Spn6TDxb2 , & + Spn6TDxb3 , Spn6TDyb1 , Spn6TDyb2 , Spn6TDyb3 , Spn6TDzb1 , Spn6TDzb2 , Spn6TDzb3 , & + Spn7ALgxb1 , Spn7ALgxb2 , Spn7ALgxb3 , Spn7ALgyb1 , Spn7ALgyb2 , Spn7ALgyb3 , Spn7ALgzb1 , & + Spn7ALgzb2 , Spn7ALgzb3 , Spn7ALxb1 , Spn7ALxb2 , Spn7ALxb3 , Spn7ALyb1 , Spn7ALyb2 , & + Spn7ALyb3 , Spn7ALzb1 , Spn7ALzb2 , Spn7ALzb3 , Spn7FLxb1 , Spn7FLxb2 , Spn7FLxb3 , & + Spn7FLyb1 , Spn7FLyb2 , Spn7FLyb3 , Spn7FLzb1 , Spn7FLzb2 , Spn7FLzb3 , Spn7MLxb1 , & + Spn7MLxb2 , Spn7MLxb3 , Spn7MLyb1 , Spn7MLyb2 , Spn7MLyb3 , Spn7MLzb1 , Spn7MLzb2 , & + Spn7MLzb3 , Spn7RDxb1 , Spn7RDxb2 , Spn7RDxb3 , Spn7RDyb1 , Spn7RDyb2 , Spn7RDyb3 , & + Spn7RDzb1 , Spn7RDzb2 , Spn7RDzb3 , Spn7TDxb1 , Spn7TDxb2 , Spn7TDxb3 , Spn7TDyb1 , & + Spn7TDyb2 , Spn7TDyb3 , Spn7TDzb1 , Spn7TDzb2 , Spn7TDzb3 , Spn8ALgxb1 , Spn8ALgxb2 , & + Spn8ALgxb3 , Spn8ALgyb1 , Spn8ALgyb2 , Spn8ALgyb3 , Spn8ALgzb1 , Spn8ALgzb2 , Spn8ALgzb3 , & + Spn8ALxb1 , Spn8ALxb2 , Spn8ALxb3 , Spn8ALyb1 , Spn8ALyb2 , Spn8ALyb3 , Spn8ALzb1 , & + Spn8ALzb2 , Spn8ALzb3 , Spn8FLxb1 , Spn8FLxb2 , Spn8FLxb3 , Spn8FLyb1 , Spn8FLyb2 , & + Spn8FLyb3 , Spn8FLzb1 , Spn8FLzb2 , Spn8FLzb3 , Spn8MLxb1 , Spn8MLxb2 , Spn8MLxb3 , & + Spn8MLyb1 , Spn8MLyb2 , Spn8MLyb3 , Spn8MLzb1 , Spn8MLzb2 , Spn8MLzb3 , Spn8RDxb1 , & + Spn8RDxb2 , Spn8RDxb3 , Spn8RDyb1 , Spn8RDyb2 , Spn8RDyb3 , Spn8RDzb1 , Spn8RDzb2 , & + Spn8RDzb3 , Spn8TDxb1 , Spn8TDxb2 , Spn8TDxb3 , Spn8TDyb1 , Spn8TDyb2 , Spn8TDyb3 , & + Spn8TDzb1 , Spn8TDzb2 , Spn8TDzb3 , Spn9ALgxb1 , Spn9ALgxb2 , Spn9ALgxb3 , Spn9ALgyb1 , & + Spn9ALgyb2 , Spn9ALgyb3 , Spn9ALgzb1 , Spn9ALgzb2 , Spn9ALgzb3 , Spn9ALxb1 , Spn9ALxb2 , & + Spn9ALxb3 , Spn9ALyb1 , Spn9ALyb2 , Spn9ALyb3 , Spn9ALzb1 , Spn9ALzb2 , Spn9ALzb3 , & + Spn9FLxb1 , Spn9FLxb2 , Spn9FLxb3 , Spn9FLyb1 , Spn9FLyb2 , Spn9FLyb3 , Spn9FLzb1 , & + Spn9FLzb2 , Spn9FLzb3 , Spn9MLxb1 , Spn9MLxb2 , Spn9MLxb3 , Spn9MLyb1 , Spn9MLyb2 , & + Spn9MLyb3 , Spn9MLzb1 , Spn9MLzb2 , Spn9MLzb3 , Spn9RDxb1 , Spn9RDxb2 , Spn9RDxb3 , & + Spn9RDyb1 , Spn9RDyb2 , Spn9RDyb3 , Spn9RDzb1 , Spn9RDzb2 , Spn9RDzb3 , Spn9TDxb1 , & + Spn9TDxb2 , Spn9TDxb3 , Spn9TDyb1 , Spn9TDyb2 , Spn9TDyb3 , Spn9TDzb1 , Spn9TDzb2 , & + Spn9TDzb3 , TailFurlP , TailFurlA , TailFurlP , TailFurlV , TeetAya , TeetPya , & + TeetPya , TeetVya , TFrlBrM , TipClrnc1 , TipClrnc2 , TipClrnc3 , TipALgxb1 , & + TipALgxb2 , TipALgxb3 , TipALgyb1 , TipALgyb2 , TipALgyb3 , TipALgzb1 , TipALgzb2 , & + TipALgzb3 , TipALxb1 , TipALxb2 , TipALxb3 , TipALyb1 , TipALyb2 , TipALyb3 , & + TipALzb1 , TipALzb2 , TipALzb3 , TipClrnc1 , TipClrnc2 , TipClrnc3 , TipDxb1 , & + TipDxb2 , TipDxb3 , TipDxc1 , TipDxc2 , TipDxc3 , TipDyb1 , TipDyb2 , & + TipDyb3 , TipDyc1 , TipDyc2 , TipDyc3 , TipDzc1 , TipDzc2 , TipDzc3 , & + TipDzc1 , TipDzc2 , TipDzc3 , TipRDxb1 , TipRDxb2 , TipRDxb3 , TipRDyb1 , & + TipRDyb2 , TipRDyb3 , TipRDzc1 , TipRDzc2 , TipRDzc3 , TipRDzc1 , TipRDzc2 , & + TipRDzc3 , YawBrTDzt , YawBrTDxt , YawBrRDyt , YawBrRDxt , YawBrTDyt , YawBrRDzt , & + TwHt1ALgxt , TwHt1ALgyt , TwHt1ALgzt , TwHt1ALxt , TwHt1ALyt , TwHt1ALzt , TwHt1FLxt , & + TwHt1FLyt , TwHt1FLzt , TwHt1MLxt , TwHt1MLyt , TwHt1MLzt , TwHt1RDxt , TwHt1RDyt , & + TwHt1RDzt , TwHt1RPxi , TwHt1RPyi , TwHt1RPzi , TwHt1TDxt , TwHt1TDyt , TwHt1TDzt , & + TwHt1TPxi , TwHt1TPyi , TwHt1TPzi , TwHt2ALgxt , TwHt2ALgyt , TwHt2ALgzt , TwHt2ALxt , & + TwHt2ALyt , TwHt2ALzt , TwHt2FLxt , TwHt2FLyt , TwHt2FLzt , TwHt2MLxt , TwHt2MLyt , & + TwHt2MLzt , TwHt2RDxt , TwHt2RDyt , TwHt2RDzt , TwHt2RPxi , TwHt2RPyi , TwHt2RPzi , & + TwHt2TDxt , TwHt2TDyt , TwHt2TDzt , TwHt2TPxi , TwHt2TPyi , TwHt2TPzi , TwHt3ALgxt , & + TwHt3ALgyt , TwHt3ALgzt , TwHt3ALxt , TwHt3ALyt , TwHt3ALzt , TwHt3FLxt , TwHt3FLyt , & + TwHt3FLzt , TwHt3MLxt , TwHt3MLyt , TwHt3MLzt , TwHt3RDxt , TwHt3RDyt , TwHt3RDzt , & + TwHt3RPxi , TwHt3RPyi , TwHt3RPzi , TwHt3TDxt , TwHt3TDyt , TwHt3TDzt , TwHt3TPxi , & + TwHt3TPyi , TwHt3TPzi , TwHt4ALgxt , TwHt4ALgyt , TwHt4ALgzt , TwHt4ALxt , TwHt4ALyt , & + TwHt4ALzt , TwHt4FLxt , TwHt4FLyt , TwHt4FLzt , TwHt4MLxt , TwHt4MLyt , TwHt4MLzt , & + TwHt4RDxt , TwHt4RDyt , TwHt4RDzt , TwHt4RPxi , TwHt4RPyi , TwHt4RPzi , TwHt4TDxt , & + TwHt4TDyt , TwHt4TDzt , TwHt4TPxi , TwHt4TPyi , TwHt4TPzi , TwHt5ALgxt , TwHt5ALgyt , & + TwHt5ALgzt , TwHt5ALxt , TwHt5ALyt , TwHt5ALzt , TwHt5FLxt , TwHt5FLyt , TwHt5FLzt , & + TwHt5MLxt , TwHt5MLyt , TwHt5MLzt , TwHt5RDxt , TwHt5RDyt , TwHt5RDzt , TwHt5RPxi , & + TwHt5RPyi , TwHt5RPzi , TwHt5TDxt , TwHt5TDyt , TwHt5TDzt , TwHt5TPxi , TwHt5TPyi , & + TwHt5TPzi , TwHt6ALgxt , TwHt6ALgyt , TwHt6ALgzt , TwHt6ALxt , TwHt6ALyt , TwHt6ALzt , & + TwHt6FLxt , TwHt6FLyt , TwHt6FLzt , TwHt6MLxt , TwHt6MLyt , TwHt6MLzt , TwHt6RDxt , & + TwHt6RDyt , TwHt6RDzt , TwHt6RPxi , TwHt6RPyi , TwHt6RPzi , TwHt6TDxt , TwHt6TDyt , & + TwHt6TDzt , TwHt6TPxi , TwHt6TPyi , TwHt6TPzi , TwHt7ALgxt , TwHt7ALgyt , TwHt7ALgzt , & + TwHt7ALxt , TwHt7ALyt , TwHt7ALzt , TwHt7FLxt , TwHt7FLyt , TwHt7FLzt , TwHt7MLxt , & + TwHt7MLyt , TwHt7MLzt , TwHt7RDxt , TwHt7RDyt , TwHt7RDzt , TwHt7RPxi , TwHt7RPyi , & + TwHt7RPzi , TwHt7TDxt , TwHt7TDyt , TwHt7TDzt , TwHt7TPxi , TwHt7TPyi , TwHt7TPzi , & + TwHt8ALgxt , TwHt8ALgyt , TwHt8ALgzt , TwHt8ALxt , TwHt8ALyt , TwHt8ALzt , TwHt8FLxt , & + TwHt8FLyt , TwHt8FLzt , TwHt8MLxt , TwHt8MLyt , TwHt8MLzt , TwHt8RDxt , TwHt8RDyt , & + TwHt8RDzt , TwHt8RPxi , TwHt8RPyi , TwHt8RPzi , TwHt8TDxt , TwHt8TDyt , TwHt8TDzt , & + TwHt8TPxi , TwHt8TPyi , TwHt8TPzi , TwHt9ALgxt , TwHt9ALgyt , TwHt9ALgzt , TwHt9ALxt , & + TwHt9ALyt , TwHt9ALzt , TwHt9FLxt , TwHt9FLyt , TwHt9FLzt , TwHt9MLxt , TwHt9MLyt , & + TwHt9MLzt , TwHt9RDxt , TwHt9RDyt , TwHt9RDzt , TwHt9RPxi , TwHt9RPyi , TwHt9RPzi , & + TwHt9TDxt , TwHt9TDyt , TwHt9TDzt , TwHt9TPxi , TwHt9TPyi , TwHt9TPzi , TwrBsFxt , & + TwrBsFyt , TwrBsFzt , TwrBsMxt , TwrBsMyt , TwrBsMzt , TipClrnc1 , TipClrnc2 , & + TipClrnc3 , TwrTpTDxi , TwrTpTDyi , TwrTpTDzi , TipRDzc1 , TipRDzc2 , TipRDzc3 , & + YawAzn , YawAzn , YawAzn , YawBrFxn , YawBrFxp , YawBrFyn , YawBrFyp , & + YawBrFzn , YawBrFzn , YawBrMxn , YawBrMxp , YawBrMyn , YawBrMyp , YawBrMzn , & + YawBrMzn , YawBrRAxp , YawBrRAyp , YawBrRAzp , YawBrRDxt , YawBrRDyt , YawBrRDzt , & + YawBrRVxp , YawBrRVyp , YawBrRVzp , YawBrTAgxp , YawBrTAgyp , YawBrTAgzp , YawBrTAxp , & + YawBrTAyp , YawBrTAzp , TwrTpTDxi , YawBrTDxp , YawBrTDxt , TwrTpTDyi , YawBrTDyp , & + YawBrTDyt , TwrTpTDzi , YawBrTDzp , YawBrTDzt , YawBrTVxp , YawBrTVyp , YawBrTVzp , & + YawFriMfp , YawFriMom , YawFriMz , YawPzn , YawPzn , YawPzn , YawVzn , & + YawVzn , YawVzn /) + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry(1115) = (/ character(ChanLen) :: & ! This lists the units corresponding to the allowed parameters "(deg) ","(deg) ","(deg) ","(deg) ","(deg) ","(deg) ","(deg) ", & - "(deg/s^2)","(rpm) ","(kN-m) ","(deg/s^2)","(kW) ","(kN-m) ","(rpm) ", & - "(m) ","(m) ","(m) ","(deg/s^2)","(deg/s^2)","(deg/s^2)","(kN) ", & - "(kN) ","(kN) ","(kN) ","(kN) ","(kN) ","(kN-m) ","(kN-m) ", & - "(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(deg) ","(deg) ","(deg) ", & - "(rpm) ","(rpm) ","(rpm) ","(kN) ","(kN) ","(kN) ","(kN) ", & - "(kN) ","(kN) ","(kN-m) ","(kN-m) ","(kW) ","(kN-m) ","(deg/s^2)", & - "(deg/s^2)","(deg/s^2)","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(deg) ", & - "(deg) ","(deg) ","(rpm) ","(rpm) ","(rpm) ","(deg) ","(deg/s^2)", & - "(deg) ","(deg/s) ","(deg/s^2)","(deg/s^2)","(deg/s^2)","(deg/s) ","(deg/s) ", & - "(deg/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s) ","(m/s) ","(m/s) ","(m) ","(m) ","(m) ","(deg) ", & - "(deg) ","(deg) ","(deg) ","(deg) ","(deg) ","(deg) ","(deg) ", & - "(deg) ","(m) ","(deg) ","(deg/s^2)","(deg/s^2)","(deg/s^2)","(deg/s^2)", & - "(deg/s^2)","(deg/s^2)","(deg) ","(deg) ","(deg) ","(deg) ","(deg/s) ", & - "(deg/s) ","(deg/s) ","(deg/s) ","(deg/s) ","(deg/s) ","(m) ","(m) ", & + "(deg/s^2)","(deg/s^2)","(rpm) ","(kN-m) ","(deg/s^2)","(kW) ","(kN-m) ", & + "(rpm) ","(m) ","(m) ","(m) ","(deg/s^2)","(deg/s^2)","(deg/s^2)", & + "(kN) ","(kN) ","(kN) ","(kN) ","(kN) ","(kN) ","(kN-m) ", & + "(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(deg) ","(deg) ", & + "(deg) ","(rpm) ","(rpm) ","(rpm) ","(kN) ","(kN) ","(kN) ", & + "(kN) ","(kN) ","(kN) ","(kN-m) ","(kN-m) ","(kW) ","(kN-m) ", & + "(deg/s^2)","(deg/s^2)","(deg/s^2)","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ", & + "(deg) ","(deg) ","(deg) ","(rpm) ","(rpm) ","(rpm) ","(deg) ", & + "(deg/s^2)","(deg) ","(deg/s) ","(deg/s^2)","(deg/s^2)","(deg/s^2)","(deg/s) ", & + "(deg/s) ","(deg/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(deg/s) ","(m) ","(m) ", & + "(m) ","(deg) ","(deg) ","(deg) ","(deg) ","(deg) ","(deg) ", & + "(deg) ","(deg) ","(deg) ","(m) ","(deg) ","(deg/s^2)","(deg/s^2)", & + "(deg/s^2)","(deg/s^2)","(deg/s^2)","(deg/s^2)","(deg) ","(deg) ","(deg) ", & + "(deg) ","(deg/s) ","(deg/s) ","(deg/s) ","(deg/s) ","(deg/s) ","(deg/s) ", & + "(m) ","(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & - "(m) ","(m) ","(m) ","(m) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(deg) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(rad/s^2)", & - "(rad/s^2)","(m/s^2) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(m/s^2) ","(m/s^2) ", & - "(rad/s^2)","(m/s^2) ","(m/s^2) ","(rad/s^2)","(m/s^2) ","(m/s^2) ","(rad/s^2)", & - "(rad/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(rad/s) ","(rad/s) ","(m/s) ","(rad/s) ", & - "(rad/s) ","(rad/s) ","(m/s) ","(m/s) ","(rad/s) ","(m/s) ","(m/s) ", & - "(rad/s) ","(m/s) ","(m/s) ","(rad/s) ","(rad/s) ","(m) ","(m) ", & + "(m) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(deg) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(rad/s^2)","(rad/s^2)","(m/s^2) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(m/s^2) ","(m/s^2) ","(rad/s^2)","(m/s^2) ","(m/s^2) ","(rad/s^2)","(m/s^2) ", & + "(m/s^2) ","(rad/s^2)","(rad/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(rad/s) ","(rad/s) ", & + "(m/s) ","(rad/s) ","(rad/s) ","(rad/s) ","(m/s) ","(m/s) ","(rad/s) ", & + "(m/s) ","(m/s) ","(rad/s) ","(m/s) ","(m/s) ","(rad/s) ","(rad/s) ", & "(m) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) ", & - "(rad) ","(rad) ","(m) ","(rad) ","(rad) ","(rad) ","(m) ", & - "(m) ","(rad) ","(m) ","(m) ","(rad) ","(m) ","(m) ", & - "(rad) ","(rad) ","(kN-m) ","(deg) ","(deg) ","(deg) ","(kN) ", & - "(kN) ","(kN) ","(kN) ","(kN) ","(kN) ","(kN) ","(kN) ", & + "(m) ","(m) ","(rad) ","(rad) ","(m) ","(rad) ","(rad) ", & + "(rad) ","(m) ","(m) ","(rad) ","(m) ","(m) ","(rad) ", & + "(m) ","(m) ","(rad) ","(rad) ","(kN-m) ","(deg) ","(deg) ", & + "(deg) ","(kN) ","(kN) ","(kN) ","(kN) ","(kN) ","(kN) ", & "(kN) ","(kN) ","(kN) ","(kN) ","(kN) ","(kN) ","(kN) ", & - "(kN) ","(kN) ","(kN) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ", & + "(kN) ","(kN) ","(kN) ","(kN) ","(kN) ","(kN-m) ","(kN-m) ", & "(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ", & "(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ", & "(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ", & - "(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(deg/s^2)","(deg) ", & - "(deg/s^2)","(deg) ","(deg/s) ","(kW) ","(rpm) ","(deg/s^2)","(deg) ", & - "(deg/s) ","(kN) ","(kN-m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ", & + "(deg/s^2)","(deg) ","(deg/s^2)","(deg) ","(deg/s) ","(kW) ","(rpm) ", & + "(deg/s^2)","(deg) ","(deg/s) ","(kN) ","(kN-m) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(kN) ","(kN) ","(kN) ","(kN) ","(kN) ", & + "(kN) ","(kN) ","(kN) ","(kN) ","(kN-m) ","(kN-m) ","(kN-m) ", & + "(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(deg) ", & + "(deg) ","(deg) ","(deg) ","(deg) ","(deg) ","(deg) ","(deg) ", & + "(deg) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) ", & + "(m) ","(m) ","(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & "(kN) ","(kN) ","(kN) ","(kN) ","(kN) ","(kN) ","(kN) ", & @@ -4373,34 +4404,16 @@ SUBROUTINE SetOutParam(OutList, p, ErrStat, ErrMsg ) "(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(deg) ","(deg) ","(deg) ", & "(deg) ","(deg) ","(deg) ","(deg) ","(deg) ","(deg) ","(m) ", & "(m) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) ", & - "(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(deg) ","(deg/s^2)","(deg) ","(deg/s) ","(deg/s^2)","(deg) ", & + "(deg) ","(deg/s) ","(kN-m) ","(m) ","(m) ","(m) ","(m/s^2) ", & "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(kN) ","(kN) ", & - "(kN) ","(kN) ","(kN) ","(kN) ","(kN) ","(kN) ","(kN) ", & - "(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ", & - "(kN-m) ","(kN-m) ","(deg) ","(deg) ","(deg) ","(deg) ","(deg) ", & - "(deg) ","(deg) ","(deg) ","(deg) ","(m) ","(m) ","(m) ", & - "(m) ","(m) ","(m) ","(m) ","(m) ","(m) ","(deg) ", & - "(deg/s^2)","(deg) ","(deg/s) ","(deg/s^2)","(deg) ","(deg) ","(deg/s) ", & - "(kN-m) ","(m) ","(m) ","(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(m) ", & "(m) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) ", & "(m) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) ", & - "(m) ","(deg) ","(deg) ","(deg) ","(deg) ","(deg) ","(deg) ", & - "(deg) ","(deg) ","(deg) ","(deg) ","(deg) ","(deg) ","(m) ", & - "(m) ","(deg) ","(deg) ","(m) ","(deg) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(kN) ","(kN) ","(kN) ", & - "(kN-m) ","(kN-m) ","(kN-m) ","(deg) ","(deg) ","(deg) ","(deg) ", & - "(deg) ","(deg) ","(m) ","(m) ","(m) ","(m) ","(m) ", & - "(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(kN) ","(kN) ","(kN) ","(kN-m) ","(kN-m) ","(kN-m) ","(deg) ", & - "(deg) ","(deg) ","(deg) ","(deg) ","(deg) ","(m) ","(m) ", & - "(m) ","(m) ","(m) ","(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(kN) ","(kN) ","(kN) ","(kN-m) ", & - "(kN-m) ","(kN-m) ","(deg) ","(deg) ","(deg) ","(deg) ","(deg) ", & - "(deg) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) ", & + "(m) ","(m) ","(m) ","(deg) ","(deg) ","(deg) ","(deg) ", & + "(deg) ","(deg) ","(deg) ","(deg) ","(deg) ","(deg) ","(deg) ", & + "(deg) ","(m) ","(m) ","(deg) ","(deg) ","(m) ","(deg) ", & "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(kN) ", & "(kN) ","(kN) ","(kN-m) ","(kN-m) ","(kN-m) ","(deg) ","(deg) ", & "(deg) ","(deg) ","(deg) ","(deg) ","(m) ","(m) ","(m) ", & @@ -4421,16 +4434,27 @@ SUBROUTINE SetOutParam(OutList, p, ErrStat, ErrMsg ) "(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & "(kN) ","(kN) ","(kN) ","(kN-m) ","(kN-m) ","(kN-m) ","(deg) ", & "(deg) ","(deg) ","(deg) ","(deg) ","(deg) ","(m) ","(m) ", & - "(m) ","(m) ","(m) ","(m) ","(kN) ","(kN) ","(kN) ", & - "(kN-m) ","(kN-m) ","(kN-m) ","(m) ","(m) ","(m) ","(m) ", & - "(m) ","(m) ","(deg) ","(deg) ","(deg) ","(deg/s^2)","(deg/s^2)", & - "(deg/s^2)","(kN) ","(kN) ","(kN) ","(kN) ","(kN) ","(kN) ", & - "(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(deg/s^2)", & - "(deg/s^2)","(deg/s^2)","(deg) ","(deg) ","(deg) ","(deg/s) ","(deg/s) ", & - "(deg/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) ", & - "(m) ","(m) ","(m/s) ","(m/s) ","(m/s) ","(deg) ","(deg) ", & - "(deg) ","(deg/s) ","(deg/s) ","(deg/s) "/) + "(m) ","(m) ","(m) ","(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(kN) ","(kN) ","(kN) ","(kN-m) ", & + "(kN-m) ","(kN-m) ","(deg) ","(deg) ","(deg) ","(deg) ","(deg) ", & + "(deg) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(kN) ", & + "(kN) ","(kN) ","(kN-m) ","(kN-m) ","(kN-m) ","(deg) ","(deg) ", & + "(deg) ","(deg) ","(deg) ","(deg) ","(m) ","(m) ","(m) ", & + "(m) ","(m) ","(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(kN) ","(kN) ","(kN) ","(kN-m) ","(kN-m) ", & + "(kN-m) ","(deg) ","(deg) ","(deg) ","(deg) ","(deg) ","(deg) ", & + "(m) ","(m) ","(m) ","(m) ","(m) ","(m) ","(kN) ", & + "(kN) ","(kN) ","(kN-m) ","(kN-m) ","(kN-m) ","(m) ","(m) ", & + "(m) ","(m) ","(m) ","(m) ","(deg) ","(deg) ","(deg) ", & + "(deg/s^2)","(deg/s^2)","(deg/s^2)","(kN) ","(kN) ","(kN) ","(kN) ", & + "(kN) ","(kN) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ","(kN-m) ", & + "(kN-m) ","(deg/s^2)","(deg/s^2)","(deg/s^2)","(deg) ","(deg) ","(deg) ", & + "(deg/s) ","(deg/s) ","(deg/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(m) ","(m) ", & + "(m) ","(m) ","(m) ","(m) ","(m/s) ","(m/s) ","(m/s) ", & + "(kN-m) ","(kN-m) ","(kN-m) ","(deg) ","(deg) ","(deg) ","(deg/s) ", & + "(deg/s) ","(deg/s) "/) ! Initialize values @@ -4704,17 +4728,18 @@ SUBROUTINE SetOutParam(OutList, p, ErrStat, ErrMsg ) p%OutParam(I)%Indx = 0 ! pick any valid channel (I just picked "Time=0" here because it's universal) p%OutParam(I)%Units = "INVALID" p%OutParam(I)%SignM = 0 ! multiply all results by zero - + CALL SetErrStat(ErrID_Fatal, TRIM(p%OutParam(I)%Name)//" is not an available output channel.",ErrStat,ErrMsg,RoutineName) END IF - + END DO - + RETURN END SUBROUTINE SetOutParam !---------------------------------------------------------------------------------------------------------------------------------- !End of code generated by Matlab script !********************************************************************************************************************************** + !> This routine is used to compute rotor (blade and hub) properties: !! KBF(), KBE(), CBF(), CBE(), FreqBF(), FreqBE(), AxRedBld(), !! TwistedSF(), BldMass(), FirstMom(), SecondMom(), BldCG(), @@ -6591,6 +6616,62 @@ SUBROUTINE Teeter( t, p, TeetDef, TeetRate, TeetMom ) RETURN END SUBROUTINE Teeter !---------------------------------------------------------------------------------------------------------------------------------- +!> This routine computes the Yaw Friction Torque due to yaw rate and acceleration. +SUBROUTINE YawFriction( t, p, Fz, Mzz, Omg, OmgDot, YawFriMf ) +!.................................................................................................................................. + + ! Passed Variables: + REAL(DbKi), INTENT(IN) :: t !< simulation time + TYPE(ED_ParameterType), INTENT(IN) :: p !< parameters from the structural dynamics module + REAL(R8Ki), INTENT(IN ) :: Fz, Mzz !< Effective yaw bearing force and external yaw bearing torque + REAL(R8Ki), INTENT(IN ) :: Omg !< The yaw rate (rotational speed), x%QDT(DOF_Yaw). + REAL(R8Ki), INTENT(IN ) :: OmgDot !< The yaw acceleration (derivative of rotational speed), x%QD2T(DOF_Yaw). + + REAL(ReKi), INTENT(OUT) :: YawFriMf !< The total friction torque (Coulomb + viscous). + + ! Local variables: + REAL(ReKi) :: temp ! It takes teh value of Fz or -1. + + + SELECT CASE ( p%YawFrctMod ) + ! Yaw-friction model {0: none, 1: does not use Fz at yaw bearing, 2: does, 3: user defined model} (switch) + + CASE ( 0_IntKi ) ! None! + + + YawFriMf = 0.0_ReKi + + + CASE ( 1_IntKi, 2_IntKi ) ! 1= no Fz use. 2=Fz used + + temp = -1.0_ReKi !In the case of YawFrctMod=1 + + IF (p%YawFrctMod .EQ. 2) THEN + temp = MIN(0.0_R8Ki, Fz) !In the case of YawFrctMod=2 + ENDIF + + IF (EqualRealNos( Omg, 0.0_R8Ki ) )THEN + YawFriMf = -MIN(real(p%M_CD,ReKi) * ABS(temp), ABS(real(Mzz,ReKi))) * SIGN(1.0_ReKi, real(Mzz,ReKi)) + IF (EqualRealNos( OmgDot, 0.0_R8Ki )) THEN + YawFriMf = -MIN(real(p%M_CSmax,ReKi) * ABS(temp), ABS(real(Mzz,ReKi))) * SIGN(1.0_ReKi, real(Mzz,ReKi)) + ENDIF + ELSE + YawFriMf = real(p%M_CD,ReKi) * temp * sign(1.0_ReKi, real(Omg,ReKi)) - real(p%sig_v,ReKi) * real(Omg,ReKi) + ENDIF + + + CASE ( 3_IntKi ) ! User-defined YawFriMf model. >>>> NOT IMPLEMENTED YET + + + CALL UserYawFrict ( t, Fz, Mzz, Omg, OmgDot, p%RootName, YawFriMf ) + + + END SELECT + + + RETURN +END SUBROUTINE YawFriction +!---------------------------------------------------------------------------------------------------------------------------------- !> This routine computes the tail-furl moment due to tail-furl deflection and rate. SUBROUTINE TFurling( t, p, TFrlDef, TFrlRate, TFrlMom ) ! Passed Variables: @@ -8463,7 +8544,7 @@ SUBROUTINE FillAugMat( p, x, CoordSys, u, HSSBrTrq, RtHSdat, AugMat ) AugMat(p%DOFs%SrtPS(I),DOF_Yaw ) = -DOT_PRODUCT( RtHSdat%PAngVelEN(DOF_Yaw ,0,:), RtHSdat%PMomBNcRt(:,p%DOFs%SrtPS(I)) ) ! [C(q,t)]N + [C(q,t)]R + [C(q,t)]G + [C(q,t)]H + [C(q,t)]B + [C(q,t)]A ENDDO ! I - All active (enabled) DOFs on or below the diagonal AugMat(DOF_Yaw , p%NAug) = DOT_PRODUCT( RtHSdat%PAngVelEN(DOF_Yaw ,0,:), RtHSdat%MomBNcRtt ) & ! {-f(qd,q,t)}N + {-f(qd,q,t)}GravN + {-f(qd,q,t)}R + {-f(qd,q,t)}GravR + {-f(qd,q,t)}G + {-f(qd,q,t)}H + {-f(qd,q,t)}GravH + {-f(qd,q,t)}B + {-f(qd,q,t)}GravB + {-f(qd,q,t)}AeroB + {-f(qd,q,t)}A + {-f(qd,q,t)}GravA + {-f(qd,q,t)}AeroA - + u%YawMom ! + {-f(qd,q,t)}SpringYaw + {-f(qd,q,t)}DampYaw; NOTE: The neutral yaw rate, YawRateNeut, defaults to zero. It is only used for yaw control. + + u%YawMom + RtHSdat%YawFriMom ! + {-f(qd,q,t)}SpringYaw + {-f(qd,q,t)}DampYaw; NOTE: The neutral yaw rate, YawRateNeut, defaults to zero. It is only used for yaw control. ENDIF @@ -9659,6 +9740,8 @@ SUBROUTINE ED_AB4( t, n, u, utimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg END IF OtherState%HSSBrTrq = OtherState%HSSBrTrqC OtherState%SgnPrvLSTQ = OtherState%SgnLSTQ(OtherState%IC(2)) + OtherState%OmegaTn = x%QDT(DOF_Yaw) !this is equal to x%QDT(DOF_Yaw) + OtherState%OmegaDotTn = m%QD2T(DOF_Yaw) !this is equal to m%QD2T(DOF_Yaw) CALL ED_CalcContStateDeriv( t, u_interp, p, x, xd, z, OtherState, m, xdot, ErrStat2, ErrMsg2 ) CALL CheckError(ErrStat2,ErrMsg2) @@ -9693,6 +9776,11 @@ SUBROUTINE ED_AB4( t, n, u, utimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg CALL FixHSSBrTq ( 'P', p, x, OtherState, m, ErrStat2, ErrMsg2 ) CALL CheckError(ErrStat2,ErrMsg2) IF ( ErrStat >= AbortErrLev ) RETURN + + CALL FixYawFric ( 'P', p, x, OtherState, m, ErrStat2, ErrMsg2 ) !KBF Make sure YawFric will not reverse nacelle direction x%qdt(dof_yaw) = OtherState%xdot(OtherState%IC(1))%qt(DOF_Yaw ) + CALL CheckError(ErrStat2,ErrMsg2) + IF ( ErrStat >= AbortErrLev ) RETURN + endif @@ -9852,6 +9940,11 @@ SUBROUTINE ED_ABM4( t, n, u, utimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg CALL FixHSSBrTq ( 'C', p, x, OtherState, m, ErrStat2, ErrMsg2 ) CALL CheckError(ErrStat2,ErrMsg2) IF ( ErrStat >= AbortErrLev ) RETURN + + CALL FixYawFric ( 'C', p, x, OtherState, m, ErrStat2, ErrMsg2 ) !KBF Make sure YawFric will not reverse nacelle direction x%qdt(dof_yaw) = OtherState%xdot(OtherState%IC(1))%qt(DOF_Yaw ) + CALL CheckError(ErrStat2,ErrMsg2) + IF ( ErrStat >= AbortErrLev ) RETURN + OtherState%SgnPrvLSTQ = SignLSSTrq(p, m) OtherState%SgnLSTQ(OtherState%IC(1)) = OtherState%SgnPrvLSTQ @@ -10330,6 +10423,201 @@ SUBROUTINE FixHSSBrTq ( Integrator, p, x, OtherState, m, ErrStat, ErrMsg ) RETURN END SUBROUTINE FixHSSBrTq +!---------------------------------------------------------------------------------------------------------------------------------- +!> This routine is used to adjust the YawFricMom value for unphysicalities. +SUBROUTINE FixYawFric ( Integrator, p, x, OtherState, m, ErrStat, ErrMsg ) + + ! Passed variables: + + TYPE(ED_ParameterType), INTENT(IN ) :: p !< Parameters of the structural dynamics module + TYPE(ED_OtherStateType), INTENT(INOUT) :: OtherState !< Other states of the structural dynamics module + TYPE(ED_MiscVarType), INTENT(INOUT) :: m !< misc (optimization) variables + TYPE(ED_ContinuousStateType),INTENT(INOUT) :: x !< Continuous states of the structural dynamics module at n+1 + CHARACTER(1), INTENT(IN ) :: Integrator !< A string holding the current integrator being used. + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + + ! Local variables: + + REAL(ReKi) :: RqdFrcYaw ! The force term required to produce RqdQD2Yaw. + REAL(ReKi) :: RqdQD2Yaw ! The required QD2T(DOF_Yaw) to cause the yaw bearing to stop rotating. + + INTEGER :: I ! Loops through all DOFs. + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'FixYawFric' + + + + ErrStat = ErrID_None + ErrMsg = "" + + IF ( .NOT. p%DOF_Flag(DOF_Yaw) .OR. EqualRealNos(m%RtHS%YawFriMom, 0.0_ReKi ) ) RETURN + + + ! The absolute magnitude of the yaw friction must have been too great + ! that the yaw speed sign was reversed. What should have happened + ! is that the yaw system should have stopped rotating. In other words, + ! QD(DOF_Yaw,IC(NMX)) should equal zero! Determining what + ! QD2T(DOF_Yaw) will make QD(DOF_Yaw,IC(NMX)) = 0, depends on + ! which integrator we are using. + + + SELECT CASE (Integrator) + + CASE ('C') ! Corrector + + ! Find the required QD2T(DOF_Yaw) to cause the yaw system to stop rotating (RqdQD2Yaw). + ! This is found by solving the corrector formula for QD2(DOF_Yaw,IC(NMX)) + ! when QD(DOF_Yaw,IC(NMX)) equals zero. + + RqdQD2Yaw = ( - OtherState%xdot(OtherState%IC(1))%qt(DOF_Yaw)/ p%DT24 & + - 19.0*OtherState%xdot(OtherState%IC(1))%qdt(DOF_Yaw) & + + 5.0*OtherState%xdot(OtherState%IC(2))%qdt(DOF_Yaw) & + - OtherState%xdot(OtherState%IC(3))%qdt(DOF_Yaw) ) / 9.0 + + CASE ('P') ! Predictor + + ! Find the required QD2T(DOF_Yaw) to cause the yaw system to stop rotating (RqdQD2Yaw). + ! This is found by solving the predictor formula for QD2(DOF_Yaw,IC(1)) + ! when QD(DOF_Yaw,IC(NMX)) equals zero. + + RqdQD2Yaw = ( - OtherState%xdot(OtherState%IC(1))%qt( DOF_Yaw) / p%DT24 & + + 59.0*OtherState%xdot(OtherState%IC(2))%qdt(DOF_Yaw) & + - 37.0*OtherState%xdot(OtherState%IC(3))%qdt(DOF_Yaw) & + + 9.0*OtherState%xdot(OtherState%IC(4))%qdt(DOF_Yaw) )/55.0 + + END SELECT + + + ! Rearrange the augmented matrix of equations of motion to account + ! for the known acceleration of the yaw DOF. To + ! do this, make the known inertia like an applied force to the + ! system. Then set force QD2T(DOF_Yaw) to equal the known + ! acceleration in the augmented matrix of equations of motion: + ! Here is how the new equations are derived. First partition the + ! augmented matrix as follows, where Qa are the unknown + ! accelerations, Qb are the known accelerations, Fa are the + ! known forces, and Fb are the unknown forces: + ! [Caa Cab]{Qa}={Fa} + ! [Cba Cbb]{Qb}={Fb} + ! By rearranging, the equations for the unknown and known + ! accelerations are as follows: + ! [Caa]{Qa}={Fa}-[Cab]{Qb} and [I]{Qb}={Qb} + ! Combining these two sets of equations into one set yields: + ! [Caa 0]{Qa}={{Fa}-[Cab]{Qb}} + ! [ 0 I]{Qb}={ {Qb}} + ! Once this equation is solved, the unknown force can be found from: + ! {Fb}=[Cba]{Qa}+[Cbb]{Qb} + + m%OgnlYawRow = m%AugMat(DOF_Yaw,:) ! copy this row before modifying the old matrix + + + DO I = 1,p%DOFs%NActvDOF ! Loop through all active (enabled) DOFs + + m%AugMat(p%DOFs%SrtPS(I), p%NAUG) = m%AugMat(p%DOFs%SrtPS(I),p%NAUG) & + - m%AugMat(p%DOFs%SrtPS(I),DOF_Yaw)*RqdQD2Yaw ! {{Fa}-[Cab]{Qb}} + m%AugMat(p%DOFs%SrtPS(I),DOF_Yaw) = 0.0 ! [0] + m%AugMat(DOF_Yaw, p%DOFs%SrtPS(I)) = 0.0 ! [0] + + ENDDO ! I - All active (enabled) DOFs + + m%AugMat(DOF_Yaw,DOF_Yaw) = 1.0 ! [I]{Qb}={Qb} + m%AugMat(DOF_Yaw, p%NAUG) = RqdQD2Yaw ! + + + ! Invert the matrix to solve for the new (updated) accelerations. Like in + ! CalcContStateDeriv(), the accelerations are returned by Gauss() in the first NActvDOF + ! elements of the solution vector, SolnVec(). These are transfered to the + ! proper index locations of the acceleration vector QD2T() using the + ! vector subscript array SrtPS(), after Gauss() has been called: + + ! Invert the matrix to solve for the accelerations. The accelerations are returned by Gauss() in the first NActvDOF elements + ! of the solution vector, SolnVec(). These are transfered to the proper index locations of the acceleration vector QD2T() + ! using the vector subscript array SrtPS(), after Gauss() has been called: + + m%AugMat_factor = m%AugMat( p%DOFs%SrtPS( 1:p%DOFs%NActvDOF ), p%DOFs%SrtPSNAUG(1:p%DOFs%NActvDOF) ) + m%SolnVec = m%AugMat( p%DOFs%SrtPS( 1:p%DOFs%NActvDOF ), p%DOFs%SrtPSNAUG(1+p%DOFs%NActvDOF) ) + + CALL LAPACK_getrf( M=p%DOFs%NActvDOF, N=p%DOFs%NActvDOF, A=m%AugMat_factor, IPIV=m%AugMat_pivot, ErrStat=ErrStat2, ErrMsg=ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF ( ErrStat >= AbortErrLev ) RETURN + + CALL LAPACK_getrs( TRANS='N',N=p%DOFs%NActvDOF, A=m%AugMat_factor,IPIV=m%AugMat_pivot, B=m%SolnVec, ErrStat=ErrStat2, ErrMsg=ErrMsg2) + + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + IF ( ErrStat >= AbortErrLev ) RETURN + + + ! Find the force required to produce RqdQD2Yaw from the equations of + ! motion using the new accelerations: + + RqdFrcYaw = 0.0 + DO I = 1,p%DOFs%NActvDOF ! Loop through all active (enabled) DOFs + ! bjj: use m%SolnVec(I) instead of m%QD2T(p%DOFs%SrtPS(I)) here; then update m%QD2T(p%DOFs%SrtPS(I)) + ! later if necessary + RqdFrcYaw = RqdFrcYaw + m%OgnlYawRow(p%DOFs%SrtPS(I))*m%SolnVec(I) ! {Fb}=[Cba]{Qa}+[Cbb]{Qb} (note that [Cba , Cbb] is the old row, and [Qa;Qb] is a single vector SolVec; %Note this is supposedly= YawFriMz+YawFriMf+DeltaM + ENDDO ! I - All active (enabled) DOFs + + ! Find the YawFriMfp necessary to bring about this force, i.e. to stop the yaw: + + OtherState%YawFriMfp = m%RtHs%YawFriMom - ( m%OgnlYawRow(p%NAUG) - RqdFrcYaw ) !This should return YawFriMf - (YawFriMz + YawFriMf - (YawFriMz + YawFriMf + deltaM)) = YawFriMf+DeltaM =YawFriMfp + + OtherState%Mfhat = ABS(OtherState%YawFriMfp) * SIGN(1.0_ReKi, real(m%RtHs%YawFriMom,ReKi)) !Mfhat should have same sign as YawFriMom (YawFriMf) + +!Now check if YawFriMfp is unphysical (i.e., it turned out aligned with omega), and then pick the minimum between YawFriMf and YawFriMfp + + IF ( ABS( OtherState%YawFriMfp ) > ABS( m%RtHs%YawFriMom )) THEN + + OtherState%Mfhat = m%RtHs%YawFriMom !OtherState%HSSBrTrqC = SIGN( u%HSSBrTrqC, x%QDT(DOF_GeAz) ) KBF CHECK THIS, does YawFriMfp need to be OtherState? + + ELSE + + ! overwrite QD2T with the new values + m%QD2T = 0.0 + DO I = 1,p%DOFs%NActvDOF ! Loop through all active (enabled) DOFs + m%QD2T(p%DOFs%SrtPS(I)) = m%SolnVec(I) + ENDDO ! I - All active (enabled) DOFs + + + ! Use the new accelerations to update the DOF values. Again, this + ! depends on the integrator type: + + SELECT CASE (Integrator) + + CASE ('C') ! Corrector + + ! Update QD and QD2 with the new accelerations using the corrector. + ! This will make QD(DOF_Yaw,IC(NMX)) equal to zero and adjust all + ! of the other QDs as necessary. + ! The Q's are unnaffected by this change. + + x%qdt = OtherState%xdot(OtherState%IC(1))%qt & ! qd at n + + p%DT24 * ( 9. * m%QD2T & ! the value we just changed + + 19. * OtherState%xdot(OtherState%IC(1))%qdt & + - 5. * OtherState%xdot(OtherState%IC(2))%qdt & + + 1. * OtherState%xdot(OtherState%IC(3))%qdt ) + + CASE ('P') ! Predictor + + ! Update QD and QD2 with the new accelerations using predictor. + + x%qdt = OtherState%xdot(OtherState%IC(1))%qt + & ! qd at n + p%DT24 * ( 55.*m%QD2T & ! the value we just changed + - 59.*OtherState%xdot(OtherState%IC(2))%qdt & + + 37.*OtherState%xdot(OtherState%IC(3))%qdt & + - 9.*OtherState%xdot(OtherState%IC(4))%qdt ) + + OtherState%xdot ( OtherState%IC(1) )%qdt = m%QD2T ! fix the history + + END SELECT + + ENDIF + + RETURN +END SUBROUTINE FixYawFric + !---------------------------------------------------------------------------------------------------------------------------------- !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/modules/elastodyn/src/ElastoDyn_IO.f90 b/modules/elastodyn/src/ElastoDyn_IO.f90 index e2be81b8a3..5a92da55b8 100644 --- a/modules/elastodyn/src/ElastoDyn_IO.f90 +++ b/modules/elastodyn/src/ElastoDyn_IO.f90 @@ -101,7 +101,13 @@ MODULE ElastoDyn_Parameters ! using the parameters listed in the "OutListParameters.xlsx" Excel file. Any changes to these ! lines should be modified in the Matlab script and/or Excel worksheet as necessary. ! =================================================================================================== -! This code was generated by Write_ChckOutLst.m at 25-Jan-2021 13:23:51. +! This code was generated by "Write_ChckOutLst.m". +!MODULE ElastoDyn_IO_Params +! +! USE NWTC_Library +! USE ElastoDyn_Types +! +! IMPLICIT NONE ! Indices for computing output channels: @@ -111,7 +117,7 @@ MODULE ElastoDyn_Parameters ! Time: - INTEGER(IntKi), PARAMETER :: Time = 0 + INTEGER(IntKi), PARAMETER :: Time = 0 ! Blade 1 Tip Motions: @@ -1083,159 +1089,167 @@ MODULE ElastoDyn_Parameters INTEGER(IntKi), PARAMETER :: YawBrMyp = 857 + ! Yaw Friction: + + INTEGER(IntKi), PARAMETER :: YawFriMom = 858 + INTEGER(IntKi), PARAMETER :: YawFriMfp = 859 + INTEGER(IntKi), PARAMETER :: YawFriMz = 860 + INTEGER(IntKi), PARAMETER :: OmegaYF = 861 + INTEGER(IntKi), PARAMETER :: dOmegaYF = 862 + + ! Tower Base Loads: - INTEGER(IntKi), PARAMETER :: TwrBsFxt = 858 - INTEGER(IntKi), PARAMETER :: TwrBsFyt = 859 - INTEGER(IntKi), PARAMETER :: TwrBsFzt = 860 - INTEGER(IntKi), PARAMETER :: TwrBsMxt = 861 - INTEGER(IntKi), PARAMETER :: TwrBsMyt = 862 - INTEGER(IntKi), PARAMETER :: TwrBsMzt = 863 + INTEGER(IntKi), PARAMETER :: TwrBsFxt = 863 + INTEGER(IntKi), PARAMETER :: TwrBsFyt = 864 + INTEGER(IntKi), PARAMETER :: TwrBsFzt = 865 + INTEGER(IntKi), PARAMETER :: TwrBsMxt = 866 + INTEGER(IntKi), PARAMETER :: TwrBsMyt = 867 + INTEGER(IntKi), PARAMETER :: TwrBsMzt = 868 ! Local Tower Loads: - INTEGER(IntKi), PARAMETER :: TwHt1MLxt = 864 - INTEGER(IntKi), PARAMETER :: TwHt1MLyt = 865 - INTEGER(IntKi), PARAMETER :: TwHt1MLzt = 866 - INTEGER(IntKi), PARAMETER :: TwHt2MLxt = 867 - INTEGER(IntKi), PARAMETER :: TwHt2MLyt = 868 - INTEGER(IntKi), PARAMETER :: TwHt2MLzt = 869 - INTEGER(IntKi), PARAMETER :: TwHt3MLxt = 870 - INTEGER(IntKi), PARAMETER :: TwHt3MLyt = 871 - INTEGER(IntKi), PARAMETER :: TwHt3MLzt = 872 - INTEGER(IntKi), PARAMETER :: TwHt4MLxt = 873 - INTEGER(IntKi), PARAMETER :: TwHt4MLyt = 874 - INTEGER(IntKi), PARAMETER :: TwHt4MLzt = 875 - INTEGER(IntKi), PARAMETER :: TwHt5MLxt = 876 - INTEGER(IntKi), PARAMETER :: TwHt5MLyt = 877 - INTEGER(IntKi), PARAMETER :: TwHt5MLzt = 878 - INTEGER(IntKi), PARAMETER :: TwHt6MLxt = 879 - INTEGER(IntKi), PARAMETER :: TwHt6MLyt = 880 - INTEGER(IntKi), PARAMETER :: TwHt6MLzt = 881 - INTEGER(IntKi), PARAMETER :: TwHt7MLxt = 882 - INTEGER(IntKi), PARAMETER :: TwHt7MLyt = 883 - INTEGER(IntKi), PARAMETER :: TwHt7MLzt = 884 - INTEGER(IntKi), PARAMETER :: TwHt8MLxt = 885 - INTEGER(IntKi), PARAMETER :: TwHt8MLyt = 886 - INTEGER(IntKi), PARAMETER :: TwHt8MLzt = 887 - INTEGER(IntKi), PARAMETER :: TwHt9MLxt = 888 - INTEGER(IntKi), PARAMETER :: TwHt9MLyt = 889 - INTEGER(IntKi), PARAMETER :: TwHt9MLzt = 890 - INTEGER(IntKi), PARAMETER :: TwHt1FLxt = 891 - INTEGER(IntKi), PARAMETER :: TwHt1FLyt = 892 - INTEGER(IntKi), PARAMETER :: TwHt1FLzt = 893 - INTEGER(IntKi), PARAMETER :: TwHt2FLxt = 894 - INTEGER(IntKi), PARAMETER :: TwHt2FLyt = 895 - INTEGER(IntKi), PARAMETER :: TwHt2FLzt = 896 - INTEGER(IntKi), PARAMETER :: TwHt3FLxt = 897 - INTEGER(IntKi), PARAMETER :: TwHt3FLyt = 898 - INTEGER(IntKi), PARAMETER :: TwHt3FLzt = 899 - INTEGER(IntKi), PARAMETER :: TwHt4FLxt = 900 - INTEGER(IntKi), PARAMETER :: TwHt4FLyt = 901 - INTEGER(IntKi), PARAMETER :: TwHt4FLzt = 902 - INTEGER(IntKi), PARAMETER :: TwHt5FLxt = 903 - INTEGER(IntKi), PARAMETER :: TwHt5FLyt = 904 - INTEGER(IntKi), PARAMETER :: TwHt5FLzt = 905 - INTEGER(IntKi), PARAMETER :: TwHt6FLxt = 906 - INTEGER(IntKi), PARAMETER :: TwHt6FLyt = 907 - INTEGER(IntKi), PARAMETER :: TwHt6FLzt = 908 - INTEGER(IntKi), PARAMETER :: TwHt7FLxt = 909 - INTEGER(IntKi), PARAMETER :: TwHt7FLyt = 910 - INTEGER(IntKi), PARAMETER :: TwHt7FLzt = 911 - INTEGER(IntKi), PARAMETER :: TwHt8FLxt = 912 - INTEGER(IntKi), PARAMETER :: TwHt8FLyt = 913 - INTEGER(IntKi), PARAMETER :: TwHt8FLzt = 914 - INTEGER(IntKi), PARAMETER :: TwHt9FLxt = 915 - INTEGER(IntKi), PARAMETER :: TwHt9FLyt = 916 - INTEGER(IntKi), PARAMETER :: TwHt9FLzt = 917 + INTEGER(IntKi), PARAMETER :: TwHt1MLxt = 869 + INTEGER(IntKi), PARAMETER :: TwHt1MLyt = 870 + INTEGER(IntKi), PARAMETER :: TwHt1MLzt = 871 + INTEGER(IntKi), PARAMETER :: TwHt2MLxt = 872 + INTEGER(IntKi), PARAMETER :: TwHt2MLyt = 873 + INTEGER(IntKi), PARAMETER :: TwHt2MLzt = 874 + INTEGER(IntKi), PARAMETER :: TwHt3MLxt = 875 + INTEGER(IntKi), PARAMETER :: TwHt3MLyt = 876 + INTEGER(IntKi), PARAMETER :: TwHt3MLzt = 877 + INTEGER(IntKi), PARAMETER :: TwHt4MLxt = 878 + INTEGER(IntKi), PARAMETER :: TwHt4MLyt = 879 + INTEGER(IntKi), PARAMETER :: TwHt4MLzt = 880 + INTEGER(IntKi), PARAMETER :: TwHt5MLxt = 881 + INTEGER(IntKi), PARAMETER :: TwHt5MLyt = 882 + INTEGER(IntKi), PARAMETER :: TwHt5MLzt = 883 + INTEGER(IntKi), PARAMETER :: TwHt6MLxt = 884 + INTEGER(IntKi), PARAMETER :: TwHt6MLyt = 885 + INTEGER(IntKi), PARAMETER :: TwHt6MLzt = 886 + INTEGER(IntKi), PARAMETER :: TwHt7MLxt = 887 + INTEGER(IntKi), PARAMETER :: TwHt7MLyt = 888 + INTEGER(IntKi), PARAMETER :: TwHt7MLzt = 889 + INTEGER(IntKi), PARAMETER :: TwHt8MLxt = 890 + INTEGER(IntKi), PARAMETER :: TwHt8MLyt = 891 + INTEGER(IntKi), PARAMETER :: TwHt8MLzt = 892 + INTEGER(IntKi), PARAMETER :: TwHt9MLxt = 893 + INTEGER(IntKi), PARAMETER :: TwHt9MLyt = 894 + INTEGER(IntKi), PARAMETER :: TwHt9MLzt = 895 + INTEGER(IntKi), PARAMETER :: TwHt1FLxt = 896 + INTEGER(IntKi), PARAMETER :: TwHt1FLyt = 897 + INTEGER(IntKi), PARAMETER :: TwHt1FLzt = 898 + INTEGER(IntKi), PARAMETER :: TwHt2FLxt = 899 + INTEGER(IntKi), PARAMETER :: TwHt2FLyt = 900 + INTEGER(IntKi), PARAMETER :: TwHt2FLzt = 901 + INTEGER(IntKi), PARAMETER :: TwHt3FLxt = 902 + INTEGER(IntKi), PARAMETER :: TwHt3FLyt = 903 + INTEGER(IntKi), PARAMETER :: TwHt3FLzt = 904 + INTEGER(IntKi), PARAMETER :: TwHt4FLxt = 905 + INTEGER(IntKi), PARAMETER :: TwHt4FLyt = 906 + INTEGER(IntKi), PARAMETER :: TwHt4FLzt = 907 + INTEGER(IntKi), PARAMETER :: TwHt5FLxt = 908 + INTEGER(IntKi), PARAMETER :: TwHt5FLyt = 909 + INTEGER(IntKi), PARAMETER :: TwHt5FLzt = 910 + INTEGER(IntKi), PARAMETER :: TwHt6FLxt = 911 + INTEGER(IntKi), PARAMETER :: TwHt6FLyt = 912 + INTEGER(IntKi), PARAMETER :: TwHt6FLzt = 913 + INTEGER(IntKi), PARAMETER :: TwHt7FLxt = 914 + INTEGER(IntKi), PARAMETER :: TwHt7FLyt = 915 + INTEGER(IntKi), PARAMETER :: TwHt7FLzt = 916 + INTEGER(IntKi), PARAMETER :: TwHt8FLxt = 917 + INTEGER(IntKi), PARAMETER :: TwHt8FLyt = 918 + INTEGER(IntKi), PARAMETER :: TwHt8FLzt = 919 + INTEGER(IntKi), PARAMETER :: TwHt9FLxt = 920 + INTEGER(IntKi), PARAMETER :: TwHt9FLyt = 921 + INTEGER(IntKi), PARAMETER :: TwHt9FLzt = 922 ! Internal Degrees of Freedom: - INTEGER(IntKi), PARAMETER :: Q_B1E1 = 918 - INTEGER(IntKi), PARAMETER :: Q_B2E1 = 919 - INTEGER(IntKi), PARAMETER :: Q_B3E1 = 920 - INTEGER(IntKi), PARAMETER :: Q_B1F1 = 921 - INTEGER(IntKi), PARAMETER :: Q_B2F1 = 922 - INTEGER(IntKi), PARAMETER :: Q_B3F1 = 923 - INTEGER(IntKi), PARAMETER :: Q_B1F2 = 924 - INTEGER(IntKi), PARAMETER :: Q_B2F2 = 925 - INTEGER(IntKi), PARAMETER :: Q_B3F2 = 926 - INTEGER(IntKi), PARAMETER :: Q_Teet = 927 - INTEGER(IntKi), PARAMETER :: Q_DrTr = 928 - INTEGER(IntKi), PARAMETER :: Q_GeAz = 929 - INTEGER(IntKi), PARAMETER :: Q_RFrl = 930 - INTEGER(IntKi), PARAMETER :: Q_TFrl = 931 - INTEGER(IntKi), PARAMETER :: Q_Yaw = 932 - INTEGER(IntKi), PARAMETER :: Q_TFA1 = 933 - INTEGER(IntKi), PARAMETER :: Q_TSS1 = 934 - INTEGER(IntKi), PARAMETER :: Q_TFA2 = 935 - INTEGER(IntKi), PARAMETER :: Q_TSS2 = 936 - INTEGER(IntKi), PARAMETER :: Q_Sg = 937 - INTEGER(IntKi), PARAMETER :: Q_Sw = 938 - INTEGER(IntKi), PARAMETER :: Q_Hv = 939 - INTEGER(IntKi), PARAMETER :: Q_R = 940 - INTEGER(IntKi), PARAMETER :: Q_P = 941 - INTEGER(IntKi), PARAMETER :: Q_Y = 942 - INTEGER(IntKi), PARAMETER :: QD_B1E1 = 943 - INTEGER(IntKi), PARAMETER :: QD_B2E1 = 944 - INTEGER(IntKi), PARAMETER :: QD_B3E1 = 945 - INTEGER(IntKi), PARAMETER :: QD_B1F1 = 946 - INTEGER(IntKi), PARAMETER :: QD_B2F1 = 947 - INTEGER(IntKi), PARAMETER :: QD_B3F1 = 948 - INTEGER(IntKi), PARAMETER :: QD_B1F2 = 949 - INTEGER(IntKi), PARAMETER :: QD_B2F2 = 950 - INTEGER(IntKi), PARAMETER :: QD_B3F2 = 951 - INTEGER(IntKi), PARAMETER :: QD_Teet = 952 - INTEGER(IntKi), PARAMETER :: QD_DrTr = 953 - INTEGER(IntKi), PARAMETER :: QD_GeAz = 954 - INTEGER(IntKi), PARAMETER :: QD_RFrl = 955 - INTEGER(IntKi), PARAMETER :: QD_TFrl = 956 - INTEGER(IntKi), PARAMETER :: QD_Yaw = 957 - INTEGER(IntKi), PARAMETER :: QD_TFA1 = 958 - INTEGER(IntKi), PARAMETER :: QD_TSS1 = 959 - INTEGER(IntKi), PARAMETER :: QD_TFA2 = 960 - INTEGER(IntKi), PARAMETER :: QD_TSS2 = 961 - INTEGER(IntKi), PARAMETER :: QD_Sg = 962 - INTEGER(IntKi), PARAMETER :: QD_Sw = 963 - INTEGER(IntKi), PARAMETER :: QD_Hv = 964 - INTEGER(IntKi), PARAMETER :: QD_R = 965 - INTEGER(IntKi), PARAMETER :: QD_P = 966 - INTEGER(IntKi), PARAMETER :: QD_Y = 967 - INTEGER(IntKi), PARAMETER :: QD2_B1E1 = 968 - INTEGER(IntKi), PARAMETER :: QD2_B2E1 = 969 - INTEGER(IntKi), PARAMETER :: QD2_B3E1 = 970 - INTEGER(IntKi), PARAMETER :: QD2_B1F1 = 971 - INTEGER(IntKi), PARAMETER :: QD2_B2F1 = 972 - INTEGER(IntKi), PARAMETER :: QD2_B3F1 = 973 - INTEGER(IntKi), PARAMETER :: QD2_B1F2 = 974 - INTEGER(IntKi), PARAMETER :: QD2_B2F2 = 975 - INTEGER(IntKi), PARAMETER :: QD2_B3F2 = 976 - INTEGER(IntKi), PARAMETER :: QD2_Teet = 977 - INTEGER(IntKi), PARAMETER :: QD2_DrTr = 978 - INTEGER(IntKi), PARAMETER :: QD2_GeAz = 979 - INTEGER(IntKi), PARAMETER :: QD2_RFrl = 980 - INTEGER(IntKi), PARAMETER :: QD2_TFrl = 981 - INTEGER(IntKi), PARAMETER :: QD2_Yaw = 982 - INTEGER(IntKi), PARAMETER :: QD2_TFA1 = 983 - INTEGER(IntKi), PARAMETER :: QD2_TSS1 = 984 - INTEGER(IntKi), PARAMETER :: QD2_TFA2 = 985 - INTEGER(IntKi), PARAMETER :: QD2_TSS2 = 986 - INTEGER(IntKi), PARAMETER :: QD2_Sg = 987 - INTEGER(IntKi), PARAMETER :: QD2_Sw = 988 - INTEGER(IntKi), PARAMETER :: QD2_Hv = 989 - INTEGER(IntKi), PARAMETER :: QD2_R = 990 - INTEGER(IntKi), PARAMETER :: QD2_P = 991 - INTEGER(IntKi), PARAMETER :: QD2_Y = 992 + INTEGER(IntKi), PARAMETER :: Q_B1E1 = 923 + INTEGER(IntKi), PARAMETER :: Q_B2E1 = 924 + INTEGER(IntKi), PARAMETER :: Q_B3E1 = 925 + INTEGER(IntKi), PARAMETER :: Q_B1F1 = 926 + INTEGER(IntKi), PARAMETER :: Q_B2F1 = 927 + INTEGER(IntKi), PARAMETER :: Q_B3F1 = 928 + INTEGER(IntKi), PARAMETER :: Q_B1F2 = 929 + INTEGER(IntKi), PARAMETER :: Q_B2F2 = 930 + INTEGER(IntKi), PARAMETER :: Q_B3F2 = 931 + INTEGER(IntKi), PARAMETER :: Q_Teet = 932 + INTEGER(IntKi), PARAMETER :: Q_DrTr = 933 + INTEGER(IntKi), PARAMETER :: Q_GeAz = 934 + INTEGER(IntKi), PARAMETER :: Q_RFrl = 935 + INTEGER(IntKi), PARAMETER :: Q_TFrl = 936 + INTEGER(IntKi), PARAMETER :: Q_Yaw = 937 + INTEGER(IntKi), PARAMETER :: Q_TFA1 = 938 + INTEGER(IntKi), PARAMETER :: Q_TSS1 = 939 + INTEGER(IntKi), PARAMETER :: Q_TFA2 = 940 + INTEGER(IntKi), PARAMETER :: Q_TSS2 = 941 + INTEGER(IntKi), PARAMETER :: Q_Sg = 942 + INTEGER(IntKi), PARAMETER :: Q_Sw = 943 + INTEGER(IntKi), PARAMETER :: Q_Hv = 944 + INTEGER(IntKi), PARAMETER :: Q_R = 945 + INTEGER(IntKi), PARAMETER :: Q_P = 946 + INTEGER(IntKi), PARAMETER :: Q_Y = 947 + INTEGER(IntKi), PARAMETER :: QD_B1E1 = 948 + INTEGER(IntKi), PARAMETER :: QD_B2E1 = 949 + INTEGER(IntKi), PARAMETER :: QD_B3E1 = 950 + INTEGER(IntKi), PARAMETER :: QD_B1F1 = 951 + INTEGER(IntKi), PARAMETER :: QD_B2F1 = 952 + INTEGER(IntKi), PARAMETER :: QD_B3F1 = 953 + INTEGER(IntKi), PARAMETER :: QD_B1F2 = 954 + INTEGER(IntKi), PARAMETER :: QD_B2F2 = 955 + INTEGER(IntKi), PARAMETER :: QD_B3F2 = 956 + INTEGER(IntKi), PARAMETER :: QD_Teet = 957 + INTEGER(IntKi), PARAMETER :: QD_DrTr = 958 + INTEGER(IntKi), PARAMETER :: QD_GeAz = 959 + INTEGER(IntKi), PARAMETER :: QD_RFrl = 960 + INTEGER(IntKi), PARAMETER :: QD_TFrl = 961 + INTEGER(IntKi), PARAMETER :: QD_Yaw = 962 + INTEGER(IntKi), PARAMETER :: QD_TFA1 = 963 + INTEGER(IntKi), PARAMETER :: QD_TSS1 = 964 + INTEGER(IntKi), PARAMETER :: QD_TFA2 = 965 + INTEGER(IntKi), PARAMETER :: QD_TSS2 = 966 + INTEGER(IntKi), PARAMETER :: QD_Sg = 967 + INTEGER(IntKi), PARAMETER :: QD_Sw = 968 + INTEGER(IntKi), PARAMETER :: QD_Hv = 969 + INTEGER(IntKi), PARAMETER :: QD_R = 970 + INTEGER(IntKi), PARAMETER :: QD_P = 971 + INTEGER(IntKi), PARAMETER :: QD_Y = 972 + INTEGER(IntKi), PARAMETER :: QD2_B1E1 = 973 + INTEGER(IntKi), PARAMETER :: QD2_B2E1 = 974 + INTEGER(IntKi), PARAMETER :: QD2_B3E1 = 975 + INTEGER(IntKi), PARAMETER :: QD2_B1F1 = 976 + INTEGER(IntKi), PARAMETER :: QD2_B2F1 = 977 + INTEGER(IntKi), PARAMETER :: QD2_B3F1 = 978 + INTEGER(IntKi), PARAMETER :: QD2_B1F2 = 979 + INTEGER(IntKi), PARAMETER :: QD2_B2F2 = 980 + INTEGER(IntKi), PARAMETER :: QD2_B3F2 = 981 + INTEGER(IntKi), PARAMETER :: QD2_Teet = 982 + INTEGER(IntKi), PARAMETER :: QD2_DrTr = 983 + INTEGER(IntKi), PARAMETER :: QD2_GeAz = 984 + INTEGER(IntKi), PARAMETER :: QD2_RFrl = 985 + INTEGER(IntKi), PARAMETER :: QD2_TFrl = 986 + INTEGER(IntKi), PARAMETER :: QD2_Yaw = 987 + INTEGER(IntKi), PARAMETER :: QD2_TFA1 = 988 + INTEGER(IntKi), PARAMETER :: QD2_TSS1 = 989 + INTEGER(IntKi), PARAMETER :: QD2_TFA2 = 990 + INTEGER(IntKi), PARAMETER :: QD2_TSS2 = 991 + INTEGER(IntKi), PARAMETER :: QD2_Sg = 992 + INTEGER(IntKi), PARAMETER :: QD2_Sw = 993 + INTEGER(IntKi), PARAMETER :: QD2_Hv = 994 + INTEGER(IntKi), PARAMETER :: QD2_R = 995 + INTEGER(IntKi), PARAMETER :: QD2_P = 996 + INTEGER(IntKi), PARAMETER :: QD2_Y = 997 ! The maximum number of output channels which can be output by the code. - INTEGER(IntKi), PARAMETER :: MaxOutPts = 992 + INTEGER(IntKi), PARAMETER :: MaxOutPts = 997 -!End of code generated by Matlab script +!End of code generated by Matlab script Write_ChckOutLst ! =================================================================================================== - INTEGER, PARAMETER :: TipDxc( 3) = (/TipDxc1, TipDxc2, TipDxc3/) INTEGER, PARAMETER :: TipDyc( 3) = (/TipDyc1, TipDyc2, TipDyc3/) INTEGER, PARAMETER :: TipDzc( 3) = (/TipDzc1, TipDzc2, TipDzc3/) @@ -3505,6 +3519,47 @@ SUBROUTINE ReadPrimaryFile( InputFile, InputFileData, BldFile, FurlFile, TwrFile RETURN END IF + !---------------------- YAW-FRICTION -------------------------------------------- + CALL ReadCom( UnIn, InputFile, 'Section Header: Yaw-Friction', ErrStat2, ErrMsg2, UnEc ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + IF ( ErrStat >= AbortErrLev ) THEN + CALL Cleanup() + RETURN + END IF + + ! YawFrctMod - Yaw-friction model switch (-): + CALL ReadVar( UnIn, InputFile, InputFileData%YawFrctMod, "YawFrctMod", "Yaw-friction model switch (-)", ErrStat2, ErrMsg2, UnEc) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + IF ( ErrStat >= AbortErrLev ) THEN + CALL Cleanup() + RETURN + END IF + + ! M_CSmax - Maximum Coulomb friction torque (N-m): + CALL ReadVar( UnIn, InputFile, InputFileData%M_CSmax, "M_CSmax", "Maximum Coulomb friction torque (N-m)", ErrStat2, ErrMsg2, UnEc) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + IF ( ErrStat >= AbortErrLev ) THEN + CALL Cleanup() + RETURN + END IF + + ! M_CD - Dynamic friction moment at null yaw rate (N-m): + CALL ReadVar( UnIn, InputFile, InputFileData%M_CD, "M_CD", "Dynamic friction moment at null yaw rate (N-m)", ErrStat2, ErrMsg2, UnEc) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + IF ( ErrStat >= AbortErrLev ) THEN + CALL Cleanup() + RETURN + END IF + + ! sig_v - Viscous friction coefficiant (N-m s/rad): + CALL ReadVar( UnIn, InputFile, InputFileData%sig_v, "sig_v", "Viscous friction coefficient (N-m/(rad/s))", ErrStat2, ErrMsg2, UnEc) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + IF ( ErrStat >= AbortErrLev ) THEN + CALL Cleanup() + RETURN + END IF + + !---------------------- DRIVETRAIN ---------------------------------------------- CALL ReadCom( UnIn, InputFile, 'Section Header: Drivetrain', ErrStat2, ErrMsg2, UnEc ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) @@ -4533,6 +4588,14 @@ SUBROUTINE ValidatePrimaryData( InputFileData, BD4Blades, Linearize, MHK, ErrSta END IF + !Yaw-Friction User input checks + IF ( ( InputFileData%YawFrctMod /= 0_IntKi ) .AND. ( InputFileData%YawFrctMod /= 1_IntKi ) .AND. & + ( InputFileData%YawFrctMod /= 2_IntKi ) .AND. ( InputFileData%YawFrctMod /= 3_IntKi )) & + CALL SetErrStat( ErrID_Fatal, 'YawFrctMod must be 0, 1, 2, or 3',ErrStat,ErrMsg,RoutineName) + IF ( InputFileData%M_CD < 0_R8Ki ) CALL SetErrStat( ErrID_Fatal, 'M_CD must be greater than or equal to 0.',ErrStat,ErrMsg,RoutineName ) + IF ( InputFileData%M_CSmax < 0_R8Ki ) CALL SetErrStat( ErrID_Fatal, 'M_CSmax must be greater than or equal to 0.',ErrStat,ErrMsg,RoutineName ) + IF ( InputFileData%sig_v < 0_R8Ki ) CALL SetErrStat( ErrID_Fatal, 'sig_v must be greater than or equal to 0.',ErrStat,ErrMsg,RoutineName ) + !bjj: since ED doesn't actually use OutFmt at this point, I'm going to remove this check and warning message !!!! ! Check that InputFileData%OutFmt is a valid format specifier and will fit over the column headings !!!!CALL ChkRealFmtStr( InputFileData%OutFmt, 'OutFmt', FmtWidth, ErrStat2, ErrMsg2 ) diff --git a/modules/elastodyn/src/ElastoDyn_Registry.txt b/modules/elastodyn/src/ElastoDyn_Registry.txt index 935d2ccc46..c8bdd12b08 100644 --- a/modules/elastodyn/src/ElastoDyn_Registry.txt +++ b/modules/elastodyn/src/ElastoDyn_Registry.txt @@ -164,6 +164,10 @@ typedef ^ ED_InputFile ReKi TeetSStP - - - "Rotor-teeter soft-stop position" rad typedef ^ ED_InputFile ReKi TeetHStP - - - "Rotor-teeter hard-stop position" radians typedef ^ ED_InputFile ReKi TeetSSSp - - - "Rotor-teeter soft-stop linear-spring constant" N-m/rad typedef ^ ED_InputFile ReKi TeetHSSp - - - "Rotor-teeter hard-stop linear-spring constant" N-m/rad +typedef ^ ED_InputFile IntKi YawFrctMod - - - "Identifier for YawFrctMod (0 [no friction], 1 [does not use Fz at bearing], 2 [does use Fz at bearing], or 3 [user defined model]" - +typedef ^ ED_InputFile R8Ki M_CD - - - "Dynamic friction moment at null yaw rate" N-m +typedef ^ ED_InputFile R8Ki M_CSMAX - - - "Maximum Coulomb friction torque" N-m +typedef ^ ED_InputFile R8Ki sig_v - - - "Viscous friction coefficient" N-m/(rad/s) typedef ^ ED_InputFile ReKi GBoxEff - - - "Gearbox efficiency" % typedef ^ ED_InputFile ReKi GBRatio - - - "Gearbox ratio" - typedef ^ ED_InputFile ReKi DTTorSpr - - - "Drivetrain torsional spring" N-m/rad @@ -492,6 +496,7 @@ typedef ^ ED_RtHndSide ReKi TFrlMom - - - "The total tail-furl spring and damper typedef ^ ED_RtHndSide ReKi RFrlMom - - - "The total rotor-furl spring and damper moment" typedef ^ ED_RtHndSide ReKi GBoxEffFac - - - "The factor used to apply the gearbox efficiency effects to the equation associated with the generator DOF" typedef ^ ED_RtHndSide ReKi rSAerCen {:}{:}{:} - - "aerodynamic pitching moment arm (i.e., the position vector from point S on the blade to the aerodynamic center of the element)" +typedef ^ ED_RtHndSide ReKi YawFriMom - - - "Yaw Friction Moment" kN-m # ..... States .................................................................................................................... # Define continuous (differentiable) states here: @@ -512,6 +517,10 @@ typedef ^ OtherStateType ReKi HSSBrTrq - - - "HSSBrTrq from update states; a hac typedef ^ OtherStateType ReKi HSSBrTrqC - - - "Commanded HSS brake torque (adjusted for sign)" N-m typedef ^ OtherStateType IntKi SgnPrvLSTQ - - - "The sign of the low-speed shaft torque from the previous call to RtHS(). This is calculated at the end of RtHS(). NOTE: The low-speed shaft torque is assumed to be positive at the beginning of the run!" - typedef ^ OtherStateType IntKi SgnLSTQ {ED_NMX} - - "history of sign of LSTQ" +typedef ^ OtherStateType ReKi Mfhat - - - "Final Yaw Friction Torque" N-m +typedef ^ OtherStateType ReKi YawFriMfp - - - "Yaw Friction Torque to bring yaw system to a stop at current time step" N-m +typedef ^ OtherStateType R8Ki OmegaTn - - - "Yaw rate at t_n used to calculate friction torque and yaw rate at t_n+1" rad/s +typedef ^ OtherStateType R8Ki OmegaDotTn - - - "Yaw acceleration at t_n used to calculate friction torque and yaw rate at t_n+1" rad/s^2 # ..... Misc Vars ................................................................................................................ typedef ^ MiscVarType ED_CoordSys CoordSys - - - "Coordinate systems in the FAST framework" - @@ -524,6 +533,9 @@ typedef ^ MiscVarType IntKi AugMat_pivot {:} - - "Pivot column for AugMat in LAP typedef ^ MiscVarType ReKi OgnlGeAzRo {:} - - "Original DOF_GeAz row in AugMat" - typedef ^ MiscVarType R8Ki QD2T {:} - - "Solution (acceleration) vector; the first time derivative of QDT" typedef ^ MiscVarType Logical IgnoreMod - - - "whether to ignore the modulo in ED outputs (necessary for linearization perturbations)" - +typedef ^ MiscVarType ReKi OgnlYawRow {:} - - "Original DOF_Yaw row in AugMat" - +typedef ^ MiscVarType ReKi FrcONcRt - - - "Fz acting on yaw bearing including inertial contributions" N +typedef ^ MiscVarType ReKi YawFriMz - - - "External loading on yaw bearing not including inertial contributions" N-m # ..... Parameters ................................................................................................................ # Define parameters here: @@ -740,6 +752,13 @@ typedef ^ ParameterType ReKi PtfmCMxt - - - "Downwind distance from the ground l typedef ^ ParameterType ReKi PtfmCMyt - - - "Lateral distance from the ground level [onshore], MSL [offshore wind or floating MHK], or seabed [fixed MHK] to the platform CM" meters typedef ^ ParameterType LOGICAL BD4Blades - - - "flag to determine if BeamDyn is computing blade loads (true) or ElastoDyn is (false)" - typedef ^ ParameterType LOGICAL UseAD14 - - - "flag to determine if AeroDyn14 is being used. Will remove this later when we've replaced AD14." - +typedef ^ ParameterType IntKi YawFrctMod - - - "Identifier for YawFrctMod (0 [no friction], 1 [does not use Fz at bearing], or 2 [does use Fz at bearing]" - +typedef ^ ParameterType R8Ki M_CD - - - "Dynamic friction moment at null yaw rate" N-m +typedef ^ ParameterType R8Ki M_CSMAX - - - "Maximum Coulomb friction torque" N-m +typedef ^ ParameterType R8Ki sig_v - - - "Viscous friction coefficient" N-m/(rad/s) +#typedef ^ ParameterType R8Ki thr_omg - - - "Yaw rate stiction threshold" rad/s +#typedef ^ ParameterType R8Ki thr_omgdot - - - "Yaw acceleration stiction threshold" rad/s^2 + # .... ED_AllBlNds option ........................................................................................................ typedef ^ ParameterType IntKi BldNd_NumOuts - - - "Number of requested output channels per blade node (ED_AllBldNdOuts)" - typedef ^ ParameterType IntKi BldNd_TotNumOuts - - - "Total number of requested output channels of blade node information (BldNd_NumOuts * BldNd_BlOutNd * BldNd_BladesOut -- ED_AllBldNdOuts)" - diff --git a/modules/elastodyn/src/ElastoDyn_Types.f90 b/modules/elastodyn/src/ElastoDyn_Types.f90 index a49c29ed6b..cec7ae9e19 100644 --- a/modules/elastodyn/src/ElastoDyn_Types.f90 +++ b/modules/elastodyn/src/ElastoDyn_Types.f90 @@ -186,6 +186,10 @@ MODULE ElastoDyn_Types REAL(ReKi) :: TeetHStP !< Rotor-teeter hard-stop position [radians] REAL(ReKi) :: TeetSSSp !< Rotor-teeter soft-stop linear-spring constant [N-m/rad] REAL(ReKi) :: TeetHSSp !< Rotor-teeter hard-stop linear-spring constant [N-m/rad] + INTEGER(IntKi) :: YawFrctMod !< Identifier for YawFrctMod (0 [no friction], 1 [does not use Fz at bearing], 2 [does use Fz at bearing], or 3 [user defined model] [-] + REAL(R8Ki) :: M_CD !< Dynamic friction moment at null yaw rate [N-m] + REAL(R8Ki) :: M_CSMAX !< Maximum Coulomb friction torque [N-m] + REAL(R8Ki) :: sig_v !< Viscous friction coefficient [N-m/(rad/s)] REAL(ReKi) :: GBoxEff !< Gearbox efficiency [%] REAL(ReKi) :: GBRatio !< Gearbox ratio [-] REAL(ReKi) :: DTTorSpr !< Drivetrain torsional spring [N-m/rad] @@ -492,6 +496,7 @@ MODULE ElastoDyn_Types REAL(ReKi) :: RFrlMom !< The total rotor-furl spring and damper moment [-] REAL(ReKi) :: GBoxEffFac !< The factor used to apply the gearbox efficiency effects to the equation associated with the generator DOF [-] REAL(ReKi) , DIMENSION(:,:,:), ALLOCATABLE :: rSAerCen !< aerodynamic pitching moment arm (i.e., the position vector from point S on the blade to the aerodynamic center of the element) [-] + REAL(ReKi) :: YawFriMom !< Yaw Friction Moment [kN-m] END TYPE ED_RtHndSide ! ======================= ! ========= ED_ContinuousStateType ======= @@ -519,6 +524,10 @@ MODULE ElastoDyn_Types REAL(ReKi) :: HSSBrTrqC !< Commanded HSS brake torque (adjusted for sign) [N-m] INTEGER(IntKi) :: SgnPrvLSTQ !< The sign of the low-speed shaft torque from the previous call to RtHS(). This is calculated at the end of RtHS(). NOTE: The low-speed shaft torque is assumed to be positive at the beginning of the run! [-] INTEGER(IntKi) , DIMENSION(ED_NMX) :: SgnLSTQ !< history of sign of LSTQ [-] + REAL(ReKi) :: Mfhat !< Final Yaw Friction Torque [N-m] + REAL(ReKi) :: YawFriMfp !< Yaw Friction Torque to bring yaw system to a stop at current time step [N-m] + REAL(R8Ki) :: OmegaTn !< Yaw rate at t_n used to calculate friction torque and yaw rate at t_n+1 [rad/s] + REAL(R8Ki) :: OmegaDotTn !< Yaw acceleration at t_n used to calculate friction torque and yaw rate at t_n+1 [rad/s^2] END TYPE ED_OtherStateType ! ======================= ! ========= ED_MiscVarType ======= @@ -533,6 +542,9 @@ MODULE ElastoDyn_Types REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: OgnlGeAzRo !< Original DOF_GeAz row in AugMat [-] REAL(R8Ki) , DIMENSION(:), ALLOCATABLE :: QD2T !< Solution (acceleration) vector; the first time derivative of QDT [-] LOGICAL :: IgnoreMod !< whether to ignore the modulo in ED outputs (necessary for linearization perturbations) [-] + REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: OgnlYawRow !< Original DOF_Yaw row in AugMat [-] + REAL(ReKi) :: FrcONcRt !< Fz acting on yaw bearing including inertial contributions [N] + REAL(ReKi) :: YawFriMz !< External loading on yaw bearing not including inertial contributions [N-m] END TYPE ED_MiscVarType ! ======================= ! ========= ED_ParameterType ======= @@ -747,6 +759,10 @@ MODULE ElastoDyn_Types REAL(ReKi) :: PtfmCMyt !< Lateral distance from the ground level [onshore], MSL [offshore wind or floating MHK], or seabed [fixed MHK] to the platform CM [meters] LOGICAL :: BD4Blades !< flag to determine if BeamDyn is computing blade loads (true) or ElastoDyn is (false) [-] LOGICAL :: UseAD14 !< flag to determine if AeroDyn14 is being used. Will remove this later when we've replaced AD14. [-] + INTEGER(IntKi) :: YawFrctMod !< Identifier for YawFrctMod (0 [no friction], 1 [does not use Fz at bearing], or 2 [does use Fz at bearing] [-] + REAL(R8Ki) :: M_CD !< Dynamic friction moment at null yaw rate [N-m] + REAL(R8Ki) :: M_CSMAX !< Maximum Coulomb friction torque [N-m] + REAL(R8Ki) :: sig_v !< Viscous friction coefficient [N-m/(rad/s)] INTEGER(IntKi) :: BldNd_NumOuts !< Number of requested output channels per blade node (ED_AllBldNdOuts) [-] INTEGER(IntKi) :: BldNd_TotNumOuts !< Total number of requested output channels of blade node information (BldNd_NumOuts * BldNd_BlOutNd * BldNd_BladesOut -- ED_AllBldNdOuts) [-] TYPE(OutParmType) , DIMENSION(:), ALLOCATABLE :: BldNd_OutParam !< Names and units (and other characteristics) of all requested output parameters [-] @@ -3204,6 +3220,10 @@ SUBROUTINE ED_CopyInputFile( SrcInputFileData, DstInputFileData, CtrlCode, ErrSt DstInputFileData%TeetHStP = SrcInputFileData%TeetHStP DstInputFileData%TeetSSSp = SrcInputFileData%TeetSSSp DstInputFileData%TeetHSSp = SrcInputFileData%TeetHSSp + DstInputFileData%YawFrctMod = SrcInputFileData%YawFrctMod + DstInputFileData%M_CD = SrcInputFileData%M_CD + DstInputFileData%M_CSMAX = SrcInputFileData%M_CSMAX + DstInputFileData%sig_v = SrcInputFileData%sig_v DstInputFileData%GBoxEff = SrcInputFileData%GBoxEff DstInputFileData%GBRatio = SrcInputFileData%GBRatio DstInputFileData%DTTorSpr = SrcInputFileData%DTTorSpr @@ -3641,6 +3661,10 @@ SUBROUTINE ED_PackInputFile( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg Re_BufSz = Re_BufSz + 1 ! TeetHStP Re_BufSz = Re_BufSz + 1 ! TeetSSSp Re_BufSz = Re_BufSz + 1 ! TeetHSSp + Int_BufSz = Int_BufSz + 1 ! YawFrctMod + Db_BufSz = Db_BufSz + 1 ! M_CD + Db_BufSz = Db_BufSz + 1 ! M_CSMAX + Db_BufSz = Db_BufSz + 1 ! sig_v Re_BufSz = Re_BufSz + 1 ! GBoxEff Re_BufSz = Re_BufSz + 1 ! GBRatio Re_BufSz = Re_BufSz + 1 ! DTTorSpr @@ -4061,6 +4085,14 @@ SUBROUTINE ED_PackInputFile( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg Re_Xferred = Re_Xferred + 1 ReKiBuf(Re_Xferred) = InData%TeetHSSp Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%YawFrctMod + Int_Xferred = Int_Xferred + 1 + DbKiBuf(Db_Xferred) = InData%M_CD + Db_Xferred = Db_Xferred + 1 + DbKiBuf(Db_Xferred) = InData%M_CSMAX + Db_Xferred = Db_Xferred + 1 + DbKiBuf(Db_Xferred) = InData%sig_v + Db_Xferred = Db_Xferred + 1 ReKiBuf(Re_Xferred) = InData%GBoxEff Re_Xferred = Re_Xferred + 1 ReKiBuf(Re_Xferred) = InData%GBRatio @@ -4720,6 +4752,14 @@ SUBROUTINE ED_UnPackInputFile( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err Re_Xferred = Re_Xferred + 1 OutData%TeetHSSp = ReKiBuf(Re_Xferred) Re_Xferred = Re_Xferred + 1 + OutData%YawFrctMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%M_CD = REAL(DbKiBuf(Db_Xferred), R8Ki) + Db_Xferred = Db_Xferred + 1 + OutData%M_CSMAX = REAL(DbKiBuf(Db_Xferred), R8Ki) + Db_Xferred = Db_Xferred + 1 + OutData%sig_v = REAL(DbKiBuf(Db_Xferred), R8Ki) + Db_Xferred = Db_Xferred + 1 OutData%GBoxEff = ReKiBuf(Re_Xferred) Re_Xferred = Re_Xferred + 1 OutData%GBRatio = ReKiBuf(Re_Xferred) @@ -9042,6 +9082,7 @@ SUBROUTINE ED_CopyRtHndSide( SrcRtHndSideData, DstRtHndSideData, CtrlCode, ErrSt END IF DstRtHndSideData%rSAerCen = SrcRtHndSideData%rSAerCen ENDIF + DstRtHndSideData%YawFriMom = SrcRtHndSideData%YawFriMom END SUBROUTINE ED_CopyRtHndSide SUBROUTINE ED_DestroyRtHndSide( RtHndSideData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -9728,6 +9769,7 @@ SUBROUTINE ED_PackRtHndSide( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg Int_BufSz = Int_BufSz + 2*3 ! rSAerCen upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%rSAerCen) ! rSAerCen END IF + Re_BufSz = Re_BufSz + 1 ! YawFriMom IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -11653,6 +11695,8 @@ SUBROUTINE ED_PackRtHndSide( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg END DO END DO END IF + ReKiBuf(Re_Xferred) = InData%YawFriMom + Re_Xferred = Re_Xferred + 1 END SUBROUTINE ED_PackRtHndSide SUBROUTINE ED_UnPackRtHndSide( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -13931,6 +13975,8 @@ SUBROUTINE ED_UnPackRtHndSide( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err END DO END DO END IF + OutData%YawFriMom = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 END SUBROUTINE ED_UnPackRtHndSide SUBROUTINE ED_CopyContState( SrcContStateData, DstContStateData, CtrlCode, ErrStat, ErrMsg ) @@ -14483,6 +14529,10 @@ SUBROUTINE ED_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, Er DstOtherStateData%HSSBrTrqC = SrcOtherStateData%HSSBrTrqC DstOtherStateData%SgnPrvLSTQ = SrcOtherStateData%SgnPrvLSTQ DstOtherStateData%SgnLSTQ = SrcOtherStateData%SgnLSTQ + DstOtherStateData%Mfhat = SrcOtherStateData%Mfhat + DstOtherStateData%YawFriMfp = SrcOtherStateData%YawFriMfp + DstOtherStateData%OmegaTn = SrcOtherStateData%OmegaTn + DstOtherStateData%OmegaDotTn = SrcOtherStateData%OmegaDotTn END SUBROUTINE ED_CopyOtherState SUBROUTINE ED_DestroyOtherState( OtherStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -14580,6 +14630,10 @@ SUBROUTINE ED_PackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs Re_BufSz = Re_BufSz + 1 ! HSSBrTrqC Int_BufSz = Int_BufSz + 1 ! SgnPrvLSTQ Int_BufSz = Int_BufSz + SIZE(InData%SgnLSTQ) ! SgnLSTQ + Re_BufSz = Re_BufSz + 1 ! Mfhat + Re_BufSz = Re_BufSz + 1 ! YawFriMfp + Db_BufSz = Db_BufSz + 1 ! OmegaTn + Db_BufSz = Db_BufSz + 1 ! OmegaDotTn IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -14664,6 +14718,14 @@ SUBROUTINE ED_PackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs IntKiBuf(Int_Xferred) = InData%SgnLSTQ(i1) Int_Xferred = Int_Xferred + 1 END DO + ReKiBuf(Re_Xferred) = InData%Mfhat + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%YawFriMfp + Re_Xferred = Re_Xferred + 1 + DbKiBuf(Db_Xferred) = InData%OmegaTn + Db_Xferred = Db_Xferred + 1 + DbKiBuf(Db_Xferred) = InData%OmegaDotTn + Db_Xferred = Db_Xferred + 1 END SUBROUTINE ED_PackOtherState SUBROUTINE ED_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -14769,6 +14831,14 @@ SUBROUTINE ED_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er OutData%SgnLSTQ(i1) = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 END DO + OutData%Mfhat = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%YawFriMfp = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%OmegaTn = REAL(DbKiBuf(Db_Xferred), R8Ki) + Db_Xferred = Db_Xferred + 1 + OutData%OmegaDotTn = REAL(DbKiBuf(Db_Xferred), R8Ki) + Db_Xferred = Db_Xferred + 1 END SUBROUTINE ED_UnPackOtherState SUBROUTINE ED_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg ) @@ -14882,6 +14952,20 @@ SUBROUTINE ED_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg ) DstMiscData%QD2T = SrcMiscData%QD2T ENDIF DstMiscData%IgnoreMod = SrcMiscData%IgnoreMod +IF (ALLOCATED(SrcMiscData%OgnlYawRow)) THEN + i1_l = LBOUND(SrcMiscData%OgnlYawRow,1) + i1_u = UBOUND(SrcMiscData%OgnlYawRow,1) + IF (.NOT. ALLOCATED(DstMiscData%OgnlYawRow)) THEN + ALLOCATE(DstMiscData%OgnlYawRow(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMiscData%OgnlYawRow.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstMiscData%OgnlYawRow = SrcMiscData%OgnlYawRow +ENDIF + DstMiscData%FrcONcRt = SrcMiscData%FrcONcRt + DstMiscData%YawFriMz = SrcMiscData%YawFriMz END SUBROUTINE ED_CopyMisc SUBROUTINE ED_DestroyMisc( MiscData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -14929,6 +15013,9 @@ SUBROUTINE ED_DestroyMisc( MiscData, ErrStat, ErrMsg, DEALLOCATEpointers ) ENDIF IF (ALLOCATED(MiscData%QD2T)) THEN DEALLOCATE(MiscData%QD2T) +ENDIF +IF (ALLOCATED(MiscData%OgnlYawRow)) THEN + DEALLOCATE(MiscData%OgnlYawRow) ENDIF END SUBROUTINE ED_DestroyMisc @@ -15038,6 +15125,13 @@ SUBROUTINE ED_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, Siz Db_BufSz = Db_BufSz + SIZE(InData%QD2T) ! QD2T END IF Int_BufSz = Int_BufSz + 1 ! IgnoreMod + Int_BufSz = Int_BufSz + 1 ! OgnlYawRow allocated yes/no + IF ( ALLOCATED(InData%OgnlYawRow) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! OgnlYawRow upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%OgnlYawRow) ! OgnlYawRow + END IF + Re_BufSz = Re_BufSz + 1 ! FrcONcRt + Re_BufSz = Re_BufSz + 1 ! YawFriMz IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -15238,6 +15332,25 @@ SUBROUTINE ED_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, Siz END IF IntKiBuf(Int_Xferred) = TRANSFER(InData%IgnoreMod, IntKiBuf(1)) Int_Xferred = Int_Xferred + 1 + IF ( .NOT. ALLOCATED(InData%OgnlYawRow) ) THEN + IntKiBuf( Int_Xferred ) = 0 + Int_Xferred = Int_Xferred + 1 + ELSE + IntKiBuf( Int_Xferred ) = 1 + Int_Xferred = Int_Xferred + 1 + IntKiBuf( Int_Xferred ) = LBOUND(InData%OgnlYawRow,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%OgnlYawRow,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%OgnlYawRow,1), UBOUND(InData%OgnlYawRow,1) + ReKiBuf(Re_Xferred) = InData%OgnlYawRow(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + ReKiBuf(Re_Xferred) = InData%FrcONcRt + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%YawFriMz + Re_Xferred = Re_Xferred + 1 END SUBROUTINE ED_PackMisc SUBROUTINE ED_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -15486,6 +15599,28 @@ SUBROUTINE ED_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) END IF OutData%IgnoreMod = TRANSFER(IntKiBuf(Int_Xferred), OutData%IgnoreMod) Int_Xferred = Int_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! OgnlYawRow not allocated + Int_Xferred = Int_Xferred + 1 + ELSE + Int_Xferred = Int_Xferred + 1 + i1_l = IntKiBuf( Int_Xferred ) + i1_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%OgnlYawRow)) DEALLOCATE(OutData%OgnlYawRow) + ALLOCATE(OutData%OgnlYawRow(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%OgnlYawRow.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%OgnlYawRow,1), UBOUND(OutData%OgnlYawRow,1) + OutData%OgnlYawRow(i1) = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + OutData%FrcONcRt = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%YawFriMz = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 END SUBROUTINE ED_UnPackMisc SUBROUTINE ED_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg ) @@ -16405,6 +16540,10 @@ SUBROUTINE ED_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg ) DstParamData%PtfmCMyt = SrcParamData%PtfmCMyt DstParamData%BD4Blades = SrcParamData%BD4Blades DstParamData%UseAD14 = SrcParamData%UseAD14 + DstParamData%YawFrctMod = SrcParamData%YawFrctMod + DstParamData%M_CD = SrcParamData%M_CD + DstParamData%M_CSMAX = SrcParamData%M_CSMAX + DstParamData%sig_v = SrcParamData%sig_v DstParamData%BldNd_NumOuts = SrcParamData%BldNd_NumOuts DstParamData%BldNd_TotNumOuts = SrcParamData%BldNd_TotNumOuts IF (ALLOCATED(SrcParamData%BldNd_OutParam)) THEN @@ -17174,6 +17313,10 @@ SUBROUTINE ED_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, Si Re_BufSz = Re_BufSz + 1 ! PtfmCMyt Int_BufSz = Int_BufSz + 1 ! BD4Blades Int_BufSz = Int_BufSz + 1 ! UseAD14 + Int_BufSz = Int_BufSz + 1 ! YawFrctMod + Db_BufSz = Db_BufSz + 1 ! M_CD + Db_BufSz = Db_BufSz + 1 ! M_CSMAX + Db_BufSz = Db_BufSz + 1 ! sig_v Int_BufSz = Int_BufSz + 1 ! BldNd_NumOuts Int_BufSz = Int_BufSz + 1 ! BldNd_TotNumOuts Int_BufSz = Int_BufSz + 1 ! BldNd_OutParam allocated yes/no @@ -18683,6 +18826,14 @@ SUBROUTINE ED_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, Si Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = TRANSFER(InData%UseAD14, IntKiBuf(1)) Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%YawFrctMod + Int_Xferred = Int_Xferred + 1 + DbKiBuf(Db_Xferred) = InData%M_CD + Db_Xferred = Db_Xferred + 1 + DbKiBuf(Db_Xferred) = InData%M_CSMAX + Db_Xferred = Db_Xferred + 1 + DbKiBuf(Db_Xferred) = InData%sig_v + Db_Xferred = Db_Xferred + 1 IntKiBuf(Int_Xferred) = InData%BldNd_NumOuts Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%BldNd_TotNumOuts @@ -20479,6 +20630,14 @@ SUBROUTINE ED_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg Int_Xferred = Int_Xferred + 1 OutData%UseAD14 = TRANSFER(IntKiBuf(Int_Xferred), OutData%UseAD14) Int_Xferred = Int_Xferred + 1 + OutData%YawFrctMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%M_CD = REAL(DbKiBuf(Db_Xferred), R8Ki) + Db_Xferred = Db_Xferred + 1 + OutData%M_CSMAX = REAL(DbKiBuf(Db_Xferred), R8Ki) + Db_Xferred = Db_Xferred + 1 + OutData%sig_v = REAL(DbKiBuf(Db_Xferred), R8Ki) + Db_Xferred = Db_Xferred + 1 OutData%BldNd_NumOuts = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 OutData%BldNd_TotNumOuts = IntKiBuf(Int_Xferred) diff --git a/reg_tests/r-test b/reg_tests/r-test index 8d21c700da..92dda1cd35 160000 --- a/reg_tests/r-test +++ b/reg_tests/r-test @@ -1 +1 @@ -Subproject commit 8d21c700da5c2455329fab9e6b4b01a0ed14d7a9 +Subproject commit 92dda1cd3570def8c6d6c092c915f432cfa99b9c